小技巧--使用Linq处理集合数据原创
47人赞赏了该文章
2,076次浏览
编辑于2022年11月17日 13:38:48
代码开发中经常会要对DATaTable、DynamicObjectCollection、List做分组、过滤、汇总、拼接,利用Linq操作方便。
首先需要
using System.Linq;
DynamicObjectCollection 可以直接使用Linq的GroupBy、where、Select
DATaTable则需要转泛型参数DataRow,再使用Linq表达式
dataTable.AsEnumerable()
分组:GroupBy,
Sql语句查到了DynamicObjectCollection
DynamicObjectCollection GLDatas = DBUtils.ExecuteDynamicObject(ctx, strSQL)
按FBillNo分组
var varAllBills = GLDatas.GroupBy(o => new { FBillNo = Convert.ToString(o["FBillNo"]) }).Select(g => new { FBillNo = g.Key.FBillNo });
取前10个元素(.Take(10))
varAllBills.Take(10)
过滤:where
var varGLDataLines = varOverDatas.Where(o => o["FBillNo"].ToString().Equals(GLData.FBillNo)).ToList();
DATaTable的汇总后Join拼接
拼接:GroupBy 后再Join。 两种方式都可以。
var varList = from s in dt.AsEnumerable() group s by new { FNumber = Convert.ToString(s["FNumber"]) } into m select new { FNumber = m.Key.FNumber, FMessage = string.Join(";", m.Select(c => Convert.ToString(c["FMessage"]))) }; var errsList = dtErrors.AsEnumerable().GroupBy(s => new { FNumber = Convert.ToString(s["FNumber"]) }).Select(g => new { FNumber = g.Key.FNumber, FMessage = string.Join(",", g.Select(c => Convert.ToString(c["FMessage"]))) });
DynamicObjectCollection的汇总后Sum
汇总:GroupBy后再Sum
var varGPDoMan = varDetailARMDS.GroupBy(s => new { FOrgID = Convert.ToString(s["FOrgID"]) }).Select(g => new { FOrgID = g.Key.FOrgID, FAppQty = g.Sum(n => Convert.ToInt32(n["FAppQty"])) }).ToList();
DynamicObjectCollection 批量写入List
DynamicObjectCollection docChannel = DBUtils.ExecuteDynamicObject(ctx, strSql); List<string> lstFChannelID = (from d in docChannel where !d["FID"].IsNullOrEmptyOrWhiteSpace() select Convert.ToString(d["FID"])).ToList(); //无需要签收的调拨申请单,结束 if (docChannel== null || docChannel.Count() <= 0) { return; }
以后有合适的再补充
赞 47
47人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!