获取实体导航属性的子集

时间:2014-03-19 11:12:38

标签: .net linq entity-framework linq-to-entities

我有用户实体并且与许多产品实体相关,我需要一种方法来获取其产品子集的用户实体而不是所有产品。

var user = User.Include("Product").ToList();  // it returnes all the products.

我需要一种方法只返回15个产品的用户。

提前致谢...

1 个答案:

答案 0 :(得分:2)

您无法以其他方式过滤或影响加载到导航属性中的数据。当您使用预先加载或延迟加载相关实体时,EF只会在没有任何条件的情况下进行LEFT OUTER JOIN。

您可以使用用户及其15个产品返回匿名对象:

var query = from u in db.Users
            select new {
                User = u,
                Top15Products = u.Products.Take(15)
            };

注意 - 如果您加载了用户实体,则可以加载过滤的相关实体集合:

var user = db.Users.Find(1);

db.Entry(user)
  .Collection(u => u.Products)
  .Query()
  .Take(15)
  .Load();

这种方法在Loading Related Entities文章中描述。