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<Enq_Item_Vend>
//data爲DataTable對象
//把DataTable對象轉化爲List對象
List<Enq_Item_Vend> eivList = BeanUtil.ToEntity<Enq_Item_Vend>(data);
要求需要進行分組,1:依據供應商進行分組(VEND_ID);2:依據來源行進行分組(Order_Type_N,Order_Id)
//1) 依據Vend_Id字段進行分組
IEnumerable<IGrouping<string, Enq_Item_Vend>> 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<Enq_Item_Vend>數據集中依據Vend_Id分組,每個組的最小值之和;