在Linq中选择Subset

时间:2016-03-08 07:47:04

标签: c# entity-framework linq

我正在尝试编写一个linq查询,该查询将排除任何具有某个整数ID的子记录的记录。

我要查询的课程如下:

public class Group {
     public ICollection<Item> { get; set; } // This is the child collection
}

public class Item {
     public int Id { get; set; }
}

我的存储库查询方法是:

public ICollection<Group> Get(int itemId) {

      return from c in Set.... // Set is an EF collection of all Groups
}

我想返回Groups集合中没有Item的所有ItemsId等于传递给该方法的itemId

不确定如何在Linq中最有效地写这个。

1 个答案:

答案 0 :(得分:2)

这样可行(我正在使用方法语法,因为我更喜欢上面查询语法的方法语法而不是连接):

var result = db.Groups.Where(g => !g.Items.Any(i => i.Id == itemID)).ToList();

选择所有不包含Id等于itemID的项目的论坛。顺便提一下,我注意到你的代码中有Set?这是否意味着您已事先获取所有组或其他内容(因此在内存中过滤)?最简单的方法是使用DbContext并从那里访问您的表格。