如何使用LINQ Lambda Where Property Count = Something

时间:2011-03-10 15:10:41

标签: linq linq-to-entities

我有一个Entity对象,Item,看起来像这样..

public class Item()
{
    IEnumerable<Category> Categories { get; set; }
}

我正在尝试获取0计数的项目列表

var unassigned = db.Items.Where(i => i.Categories.Count() == 0);

var unassigned = db.Items.Where(i => i.Categories.Any());

但都抛出错误...... “LINQ to Entities不支持指定的类型成员'Categories'。仅支持初始值设定项,实体成员和实体导航属性。”

这个错误告诉我什么,我如何查询我要找的内容?

2 个答案:

答案 0 :(得分:2)

Category是否也是由EF跟踪的实体? EF似乎并不认为它是。你在使用POCO吗?通常,1对多的导航属性需要使用ICollection<T>而不是IEnumerable来表示。

基本上EF说它不知道如何将db.Items.Where(i => i.Categories.Count() == 0)转换成SQL,因为它不确定什么类别与数据库有关。

你也可能需要Include("Categories")关于EF的电话,但我认为你有比这更基本的问题。

答案 1 :(得分:0)

尝试

var unassigned = db.Items.Categories.Where(c=>c.Count() ==0);