小技巧--使用Linq处理集合数据

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

小技巧--使用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;...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息