小技巧--使用Linq处理集合数据
代码开发中经常会要对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; }
以后有合适的再补充
groupby后sum,是List类型,用正常取list类型的方法取就可以吗
不要停
小技巧--使用Linq处理集合数据
代码开发中经常会要对DATaTable、DynamicObjectCollection、List做分组、过滤、汇总、拼接,利用Linq操作方便。首先需要using System.Linq;...
点击下载文档
本文2024-09-16 17:16:42发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-14669.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章