【问题标题】:Get subset of entity navigation properties获取实体导航属性的子集
【发布时间】:2014-03-19 11:12:37
【问题描述】:

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

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

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

提前谢谢...

【问题讨论】:

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


    【解决方案1】:

    您不能以其他方式过滤或影响加载到导航属性中的数据。当您使用相关实体的急切加载或延迟加载时,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 文章中描述了这种方法。

    【讨论】:

    • 感谢您的回复,我已经知道这个解决方案,但需要看看是否有更优雅的方法。
    • 非常感谢,第二种方法正是我需要的。 .Query() 函数的使用是我在这里缺少的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多