【问题标题】:Entity Framework: Entity to include a fixed number of navigational property : how to write this query实体框架:实体包含固定数量的导航属性:如何编写此查询
【发布时间】:2012-04-04 05:41:41
【问题描述】:

我有 2 个实体,如下所述

public class Product 
{
    public int Id { get; set; }
    public string Name { get; set; } 
    public ICollection<Comment> Comments { get; set; }    
}

public class Comment
{
    public int Id { get; set; }
    public string Message { get; set; }    

    [ForeignKey("Product")]
    public int ProductId { get; set; }
    public Product  Product { get; set; }
}

现在我想编写一个查询,其中只包含 10 个特定产品的 cmets。我在下面写的查询包括产品上的所有 cmets。

var product = db.Products.Include(a=>a.Comments).Take(10);

请建议在实体框架中是否可能。

编辑 1

将此查询更改为

var product = db.Products.Include(a=>a.Comments).FirstOrDefault(c=>c.Id==1);

这个

var product = db.Products.Include(a=>a.Comments).Take(10);

我必须加载 10 个产品,每个产品 10 cmets。

【问题讨论】:

    标签: entity-framework linq-to-entities entity-framework-4.1


    【解决方案1】:

    如果您不介意返回匿名类型或 poco,这将起作用:

    var products = from x in db.Products.Take(10)
                  select new 
                  {
                    ProductProperty1 = x.Property1,
                    Comments = x.Comments.Take(10),
                  };
    
    var product = products.FirstOrDefault(c=>c.ProductProperty1 ==1);
    

    【讨论】:

      【解决方案2】:

      您始终可以将其反转并使用产品获取Comments

      var comments = db.Comments.Include(c => c.Product)
          .Where(c => c.Product.Id == 1)
          .Take(10);
      

      【讨论】:

      • 我已将问题编辑为 - 我必须加载 10 个产品,每个产品 10 cmets。
      • 是的,但是问题中没有任何信息表明
      • @RusiNova 你的意思是任何 10 种产品正好有 10 cmets?
      • @vitaliy 是:get_first_10_prodducts_with_ten_cmets_on_each_product
      【解决方案3】:

      我相信以下会做:

      var comments = db.Comments.Where(c=>c.ProductId==1).Take(10).ToList();
      var product = db.Products.FirstOrDefault(c=>c.Id==1);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多