سؤال

وأستخدمه دون سرعة الصوت 2.1 وأنا بحاجة للقيام innerjoin واستخدام التعبير حيث وأظل الحصول على خطأ:

Must declare the scalar variable "@Partner"

وهنا هو رمز بلادي:

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From("Customer").InnerJoin("Partner")
     .Where("Partner.PartnerID").IsEqualTo("Customer.PartnerID")
 .WhereExpression("FirstName").Like("%" & SearchTerm & "%")
     .Or("LastName").Like("%" & SearchTerm & "%")
     .Or("EmailAddress").Like("%" & SearchTerm & "%")
 .CloseExpression()
 .ExecuteDataSet()

ولقد حاولت إعادة ترتيب هذا الشيء حوالي 10 طرق مختلفة وعادل لا يمكن أن يبدو للحصول على ذلك الحق.

هل كانت مفيدة؟

المحلول

هل هناك سبب تحديد معايير الانضمام في جملة WHERE بدلا من الانضمام نفسها؟

وأنا أعيد-كتب إلكترونية للاستفادة من أسماء الأعمدة بشدة المكتوبة، والتي يجب عليك القيام به كلما كان ذلك ممكنا لأنه يمكنك التقاط المشاكل في وقت الترجمة بدلا من وقت التشغيل. أيضا، استخدم .ContainsString () بدلا من أن gobblydegook متصلا لقراءة أفضل.

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From(Customer.Schema)
  .InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)
  .Where(Customer.FirstNameColumn).ContainsString(SearchTerm)
  .Or(Customer.LastNameColumn).ContainsString(SearchTerm)
  .Or(Customer.EmailAddressColumn).ContainsString(SearchTerm)
 .ExecuteDataSet()

وأو استخدام التعليمات البرمجية الأصلية، ما عليك سوى استخدام أربعة الزائد سلسلة من صلة داخلية وتحديد الأعمدة هناك. أعتقد أنك تحصل تعثرت بنسبة تحاول أن تفعل الصلة في مكان جملة عندما لا تحتاج حقا ل.

Dim ds As DataSet = UWP.Model.DB.Select("TOP 30 FirstName, LastName, EmailAddress, CustomerRowID, CompanyName")
 .From("Customer")
 .InnerJoin("Partner","PartnerID","Customer","PartnerID")
 .Where("FirstName").Like("%" & SearchTerm & "%")
     .Or("LastName").Like("%" & SearchTerm & "%")
     .Or("EmailAddress").Like("%" & SearchTerm & "%")
 .ExecuteDataSet()

نصائح أخرى

و.InnerJoin ( "ص الشريك") .. حيث ( "p.PartnerID")؟

ولقد رأيت هذا من قبل أبدا، لذلك أنا حقا مجرد تخمين. لذلك تجاهل لي إذا أنا مجرد كونها غبي: p

وهناك 2 طرق للقيام صلة داخلية مع الخارقة للصوت. الطريقة الأولى هي لتحديد الأعمدة لصلة على، مثل:

.InnerJoin(Partner.PartnerIDColumn, Customer.PartnerIDColumn)

وإذا كانت العلاقات هو بالفعل الإعداد في نموذج دون سرعة الصوت الخاص بك، يمكنك فقط تحديد الجدول، دون الحاجة إلى تحديد الأعمدة. يبدو أن هذا هو ما كنت تحاول القيام به، ولكن لم يكن لديك بناء الجملة صحيحا تماما. يجب استخدام الأدوية، مثل هذا:

.InnerJoin<Partner>()

والطريقة الثانية هي الافضل لأنها أكثر قابلية للقراءة. ومع ذلك، فإنه يعمل فقط عند محاولة الانضمام مع الجدول الذي تحدده في وظيفة من (). يجب أن يعمل بالنسبة لك في هذه الحالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top