2011-08-10 135 views
2

這工作得很好:LINQ的包含運營商

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查詢SpecID字段。有人知道怎麼做嗎?

回答

7

那麼,你可以嘗試

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

這是你想要的嗎?

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);