2012-03-29 126 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();