2012-03-29 125 views
-1

我是一個EF newb,需要一些幫助以瞭解如何通過導航屬性查詢實體。實體框架關係查詢混淆

使用C#和LINQ LAMBDA方法只是我使用得到這個代碼:

List<PublisherImage> images = db.DataModel.PublisherImages.Include("Categories").Where(pi => pi.Enabled && pi.Rendered).OrderBy(pi => pi.ID).ToList(); 

我需要能夠按類別ID的列表,所以我按該類別獲得出版商的圖像過濾此實體。使用上面的例子,我將如何去做我習慣於SQL(IN語句)的東西?

有人可以告訴我一個使用C#LINQ Lambda方法而不是LINQ運算符的例子嗎?

非常感謝!

編輯:

這裏是什麼,我試圖做一個更好的例子:

string categoryIds = "1,2,3,4"; 
var ids = Array.ConvertAll(categoryIds.Split(','), int.Parse); 
List<PublisherImage> images = db.DataModel.PublisherImages.Include("Categories").Where(pi => pi.Enabled && pi.Rendered && pi.Categories.Where(c => ids.Contains(c.ID)).Any()).OrderBy(pi => pi.ID).ToList(); 
+0

這個問題似乎還不清楚。你能否提供更多關於你的模型的信息,以及你想要過濾的值?聽起來你可以做一個'.Where(pi => ids.Contains(pi.ID))',但我不知道你的對象/關係是什麼樣子。 – mtmurdock 2012-03-29 19:09:55

+0

我剛剛添加了一個更好的代碼示例。 – Jared 2012-03-29 19:12:36

+0

好的,這段代碼更清晰,但是你的問題是什麼?看起來這會做你想做的事情。 – mtmurdock 2012-03-29 19:20:21

回答

0

從上次的代碼只是嘗試更改爲pi.Categories.Any(C => ids.Contains (c.ID))

寫在我的手機上很抱歉不寫整個查詢。

0

下編輯的代碼做的工作:

string categoryIds = "1,2,3,4"; 
var ids = Array.ConvertAll(categoryIds.Split(','), int.Parse); 
List<PublisherImage> images = db.DataModel.PublisherImages.Include("Categories").Where(pi => pi.Enabled && pi.Rendered && pi.Categories.Where(c => ids.Contains(c.ID)).Any()).OrderBy(pi => pi.ID).ToList();