C# Linq List 小结 groupBy

C# Linq List 小结:

1) List进行groupBy分组

类:Enq_Item_Vend

public class Enq_Item_Vend {

	public decimal Id { set; get; }
	
	public decimal Order_Id { set; get; }
	
	public decimal Order_Type_N { set; get; }
	
	public string Vend_Id { set; get; }

        public decimal Vat_Price { set; get; }
	
	...	

	public Enq_Item_Vend() {}
}

现在有这么一个对象List

//data为DataTable对象
//把DataTable对象转化为List对象
List eivList = BeanUtil.ToEntity(data);

要求需要进行分组,1:依据供应商进行分组(VEND_ID);2:依据来源行进行分组(Order_Type_N,Order_Id)

//1) 依据Vend_Id字段进行分组
IEnumerable> query1 = eivList.GroupBy(eiv => eiv.Vend_Id);
//2) 依据Order_Type_N,Order_Id 分组(多字段分组)
var query2 = eivList.GroupBy(eiv => new { eiv.Order_Type_N, eiv.Order_Id });

此时,获取的query1,query2对象就是分组之后的对象,但是需要注意的是query1,query2并不是同一个对象;

query对象可以继续使用select进行linq查询:

var ret1 = query1.Select(group => new {
                        Keys = group.Key,
                        TotalValue = group.Min(p => p.Vat_Price)//group有min/max等聚合函数
                    });

返回的ret1对象可以继续查询

decimal sumMinValue = ret1.Sum(r => r.TotalValue);//依然可以使用SUM/MIN/MAX等聚合函数

这里得出的sumMinValue即为List数据集中依据Vend_Id分组,每个组的最小值之和;

你可能感兴趣的:(C#)