如何在 LINQ 中实现分组

本文关键字:实现 LINQ | 更新日期: 2023-09-27 18:36:41

我对LinQ不是很熟悉,而且我有一个小问题(我认为)。基本上,我将xml文件反序列化为以下项的数组:

public string stringId{ get; set; }
public string sgent { get; set; }
public string status{ get; set; }
public string recallDate { get; set; }
public string product{ get; set; }
public string sendMethod{ get; set; }
public string campaign{ get; set; }
public string comment{ get; set; }
public string sgentId{ get; set; }
public string dateOfSell { get; set; }

到目前为止,我的列表如下所示

var model = from r in selling.sales
            where r.sgentId == idFromLoginAction.ToString()
            orderby r.dateOfSell
            select r;

它有效,但我想要实现的是获取按 dateOfSell 属性分组的此项目列表,以便稍后我可以在视图中显示它,其中 Date 属性将在每个相同日期仅显示一次,在此日期以下,我想显示所有其他属性的列表,其中 dateOfSell 属性是这个特定的日期。

我很确定我可以用 LinQ 实现这种分组。我说的对吗?有可能吗,或者这是一个糟糕的方法?贝娄我写了一个小草图来说明我的观点:

2014-01-08
Prop 1    Prop2    Prop3    prop4 ... etc
Prop 1    Prop2    Prop3    Prop4 ... etc
2014-01-07
Prop 1    Prop2    Prop3    prop4 ... etc
Prop 1    Prop2    Prop3    Prop4 ... etc
ETC ...

如何在 LINQ 中实现分组

这种方式使用GroupBy,在Select之前这样做:

var model = from r in selling.sales 
            where r.sgentId == idFromLoginAction.ToString() 
            orderby r.dateOfSell
            group r by r.dateOfSell into g
            select new { DateOfSell = g.Key, Sales = g.ToList() };
var result = selling.sales.GroupBy(s => s.dateOfSell, (key, g) => new { SellDate = key, OtherValues = g.ToList() });

然后你可以做:

        foreach(var item in result){
// Your key you grouped By
    var selDate = item.SellDate;
// List of Other Items
    var groupedItems = item.OtherValues;

        }

查看 @Devqon 提到的链接:LINQ 中的分组依据