LINQ GroupBy 3 properties?
本文关键字:properties GroupBy LINQ | 更新日期: 2023-09-27 18:12:50
我有以下类:
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
从ProductInventory
列表开始时,我如何在LINQ中编写此查询?我尝试使用多个.GroupBy
,但没有工作。
您需要根据具有多个属性的对象进行分组:
list.GroupBy(p => new { p.Manager, p.Product.Name, p.ExpirationDate.Date })
这可以工作,因为匿名类型实现Equals()
和GetHashCode()
按值进行比较。
你说你想要一个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());