Linq содержит оператор - PullRequest
       8

Linq содержит оператор

2 голосов
/ 10 августа 2011

Это прекрасно работает:

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select c.SpecID).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Contains(s.id) select s);

Однако теперь мне нужно вернуть другое поле в первом запросе:

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select new { c.SpecID, c.FriendlyName }).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Contains(s.id) select s);

Так что q.contains теперь не получается, мне нужно этокак-то работать с полем q query SpecID.Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

7 голосов
/ 10 августа 2011

Ну, вы можете попробовать :

var qq = from s in db.tblSpecifications
         where q.Select(x => x.SpecID).Contains(s.id)
         select s;

Другими словами, спроецируйте результат перед использованием Contains.Я понятия не имею, как будет выглядеть SQL.

Кстати, я бы лично написал это так:

var qq = db.tblSpecifications
           .Where(s => q.Select(x => x.SpecID).Contains(s.id));

Я использую синтаксис выражения запроса только там, где он действительновсе проще.Я также настоятельно рекомендую вам использовать несколько строк для запросов - это действительно может помочь с удобочитаемостью.

1 голос
/ 10 августа 2011

Это то, что вы хотите?

var q = (from c in db.tblLiteCategorySpecs where CategoryIDs.Contains(c.CategoryID) select new { c.SpecID, c.FriendlyName }).Distinct().ToList();
var qq = (from s in db.tblSpecifications where q.Any(c => c.SpecID == s.id) select s);
...