كيف يمكنك التعامل مع استعلام فرعي IN باستخدام LINQ إلى SQL؟
-
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
// قم بإنشاء قاموس/مجموعة/مجموعة أولاً
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
};
// قم بإنشاء قاموس/مجموعة/مجموعة أولاً
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
لا تنتمي إلى StackOverflow