كيف يمكنك التعامل مع استعلام فرعي IN باستخدام LINQ إلى SQL؟

StackOverflow https://stackoverflow.com/questions/51339

  •  09-06-2019
  •  | 
  •  

سؤال

أنا عالقة قليلا على هذا.أريد بشكل أساسي أن أفعل شيئًا مثل استعلام SQL التالي في LINQ إلى SQL:

SELECT f.* 
FROM Foo f
WHERE f.FooId IN (
    SELECT fb.FooId
    FROM FooBar fb
    WHERE fb.BarId = 1000
)

أي مساعدة سيكون تلقى بامتنان.

شكرًا.

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

المحلول

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

var innerQuery = from fb in FoorBar where fb.BarId = 1000 select fb.FooId;
var result = from f in Foo where innerQuery.Contains(f.FooId) select f;

نصائح أخرى

طريقة عامة لتنفيذ IN في LINQ إلى SQL

var q = from t1 in table1
        let t2s = from t2 in table2
                  where <Conditions for table2>
                  select t2.KeyField
        where t2s.Contains(t1.KeyField)
        select t1;

طريقة عامة لتطبيق EXISTS في LINQ إلى SQL

var q = from t1 in table1
        let t2s = from t2 in table2
                  where <Conditions for table2>
                  select t2.KeyField
        where t2s.Any(t1.KeyField)
        select t1;
from f in Foo
    where f.FooID ==
        (
            FROM fb in FooBar
            WHERE fb.BarID == 1000
            select fb.FooID

        )
    select f;

حاول استخدام خطوتين منفصلتين:

// create a Dictionary / Set / Collection fids first
var fids = (from fb in FooBar
            where fb.BarID = 1000
            select new { fooID = fb.FooID, barID = fb.BarID })
            .ToDictionary(x => x.fooID, x => x.barID);

from f in Foo
where fids.HasKey(f.FooId)
select f

// قم بإنشاء قاموس/مجموعة/مجموعة أولاً

البحث عن Artilces أخرى

var fids = (from fb in FooBar
            where fb.BarID = 1000
            select new { fooID = fb.FooID, barID = fb.BarID })
            .ToDictionary(x => x.fooID, x => x.barID);

from f in Foo
where fids.HasKey(f.FooId)
select f

جرب هذا

var fooids = from fb in foobar where fb.BarId=1000 select fb.fooID
var ff = from f in foo where f.FooID = fooids select f
var foos = Foo.Where<br>
( f => FooBar.Where(fb.BarId == 1000).Select(fb => fb.FooId).Contains(f.FooId));
from f in foo
where f.FooID equals model.FooBar.SingleOrDefault(fBar => fBar.barID = 1000).FooID
select new
{
f.Columns
};

// قم بإنشاء قاموس/مجموعة/مجموعة أولاً

البحث عن Artilces أخرى

var fids = (from fb in FooBar where fb.BarID = 1000 select new { fooID = fb.FooID, barID = fb.BarID }) .ToDictionary(x => x.fooID, x => x.barID);

from f in Foo where fids.HasKey(f.FooId) select f
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top