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<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分組,每個組的最小值之和;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章