[.NET]為 LINQ 的結果加上流水號(Row_Number)

最近透過 DbContext 使用 LINQ 取回資料後,
想要為該資料加上流水號要如何處理呢?

當取回資料後,要將它顯示在畫面上時,常常需要有流水號。
這時除了在SQL中使用 Row_Number 外,
我們可以透過 LINQ 的 Select - Indexed 哦!如下,

//BeaconAppEntities 是 DbContext
using (var db = new BeaconAppEntities())
{
	var searchData = db.IOT_USER_RECIEVE_INFO
		.Where(r => r.CRE_DATE == FilterDate
				&& (r.CATEGORY_ID == CategoryId.ToString()
				|| CategoryId == 0
				))
		.GroupBy(g => g.USER_ID)
		.Select((g) => new
		{
			UserId = g.Key,
			MinTime = g.Min(u => u.CRE_DTE),
			MaxTime = g.Max(u => u.CRE_DTE),
			Num = g.Min(u => u.IDENT_NUM)
		})
		.OrderBy(s => s.MinTime);
			
	// 需要將 EF 的結果,轉成 Enumerable
	// index 是從0開始,流水號是從1開始,所以要加 1 
	var result = searchData
		.AsEnumerable()
		.Select((u, index) => new
		{
			UserId = u.UserId,
			MinTime = u.MinTime,
			MaxTime = u.MaxTime,
			Num = u.Num,
			Idx = index + 1
		}).ToList();
		
	//最後Bind到 GridView 上	 
	gvMaster.DataSource = result;
	gvMaster.DataBind();
}

參考資料

LINQ - Projection Operators

101 LINQ Samples

Row_Number simulation in LINQ

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^