سؤال

دعنا نقول أن لدي خطط ووثائق

Dim myPlans = _context.Plans.Where(predicate1)
Dim myDocuments = _context.Documents.Where(predicate2)

لقد قمت بتنظيم جملة WHERE لكل منها باستخدام ProcessBuilder. لذلك، MyPlans و MyDocuments لها عبارة SQL الصحيحة.

ما أود القيام به هو الانضمام إلى هذين الجدولين في بيان واحد LinQ. المشكلة التي أواجهها هي أنه، افتراضيا والشرط هو الانضمام إلى حيث البنود.

myplans حيث البند: (اسم المستخدم مثل "٪ اختبار٪" و p.name مثل "٪ السرير٪") أو (p.Description مثل "٪ اختبار٪" و P.Description مثل "٪ السرير٪")

MyDocuments حيث جملة: (d.name مثل "٪ اختبار٪" و d.name مثل "٪ السرير٪") أو (d.Description مثل "٪ اختبار٪" و d.Description مثل "٪ السرير٪")

عندما أجمع بين الاثنين مستهدف النتيجة حيث البند هو:
حيث (D.ID = P.ID) و (myplans حيث الفقرة أعلاه) أو (mydocument حيث جملة أعلاه). وهذا يعني، أود أن يكون كل من البنود في كل من الجداول "أو" بدلا من "و".

النتيجة الحالية حيث جملة هي: حيث (D.ID = p.ID) و (myplans حيث جملة أعلاه) و (mydocument حيث جملة أعلاه). وهذا يعني، أود أن يكون كل من البنود في كل من الجداول "أو" بدلا من "و".

أنا تشكيل البيان مثل هذا:

Dim test = From d in myDocuments _
           Join p in MyPlans on d.ID Equals p.ID _
           Select d.Name, p.Name
هل كانت مفيدة؟

المحلول

من أجل تحقيق النتيجة المرجوة الخاصة بك، تحتاج إلى القيام بتخليل المسند وينضم في بيان واحد.

Dim myCriteria() = {"test", "bed"}
Dim test = from d in _context.Documents _
           join p in _context.Plans on d.ID Equals p.ID _
           where (myCriteria.Contains(d.Name) OR _
                   myCriteria.Contains(d.Descrition)) _
           OR (myCriteria.Contains(p.Name) OR _
                 myCriteria.Contains(p.Description)) _
           select Document = d.Name, Plan = p.Name

نصائح أخرى

يحدث هذا لأنك تقوم بعمل "تمريرة الأولى" التي تقوم بتصفية الخطط والمستندات التي تطابق المسندات الخاصة بك، و ومن بعد الانضمام إلى تلك النتائج فقط، القيام بفعالية AND. وبعد مثل Basilio قال، يجب عليك القيام بانضمامك / مرشح في نفس النجاح. قد تحاول شيئا مثل هذا:

Dim test = From d in _context.Documents _
           Join p in _context.Plans on d.ID Equals p.ID _
           Where predicate1(p) Or predicate2(d)
           Select d.Name, p.Name

أو بالمثل:

Dim test = From d in _context.Documents _
           From p in _context.Plans _
           Where d.ID = p.ID And (predicate1(p) Or predicate2(d))
           Select d.Name, p.Name
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top