0

我有以下课程:

public class ProductInventory : Entity
{
    public virtual Product Product { get; set; }
    public DateTime ExpirationDate { get; set; }
    public Manager Manager { get; set; }
}

以及我的 ViewModels 中使用的类,如下所示:

 public class ProductInventoryCountModel
{
    public Product Product { get; set; }
    public DateTime ExpirationDate { get; set; }
    public int Count { get; set; }
}

我想得到一个输出Dictionary<Manager, List<ProductInventoryCountModel>,基本上按经理显示产品,然后按到期日期,这样我就可以打印出看起来像这样的实际数据:

ManagerBoB

 --ProductA, Expires 8/15/13, Count: 10
 --ProductA, Expires 10/10/13, Count: 40
 --ProductB, Expires 6/13/13, Count: 30

ManagerTim

 --ProductA, Expires 10/10/13, Count: 5
 --ProductB, Expires 5/25/13, Count: 10
 --ProductB, Expires 6/13/13, Count 40

从列表开始时,我将如何在 LINQ 中编写此查询ProductInventory?我尝试使用多个.GroupBy,但没有奏效。

4

2 回答 2

5

您需要按具有多个属性的对象进行分组:

list.GroupBy(p => new { p.Manager, p.Product.Name, p.ExpirationDate.Date })

这是有效的,因为匿名类型实现Equals()并按GetHashCode()值进行比较。

于 2013-05-09T21:11:00.660 回答
1

你说你想要一个Dictionary<Manager, List<ProductInventoryCountModel>>,所以我认为你必须做这样的事情:

var dictionary = 
    db.ProductInventory.GroupBy(x => new { x.Manager, x.Product, x.ExpirationDate })
      .ToDictionary(g => g.Key.Manager,
                    g => g.Select(x => new ProductInventoryCountModel 
                                  {
                                      Product = x.Key.Product,
                                      ExpirationDate = x.Key.ExpirationDate,
                                      Count = x.Count()
                                  }).ToList());
于 2013-05-09T21:17:36.030 回答