C# Linq Lambda 常用语法

2 篇文章 0 订阅

 去重,以List中某元素为基准,去除次元素相同的记录

List<MouldDMDXInfo> listBM_Distinct = listAllMouldBM.Where((m, i) => listAllMouldBM.FindIndex(z => z.MouldNo == m.MouldNo) == i).ToList(); //去除MouldNo相同的记录

 以List中某元素为查询条件,判断List中是否存在数据

list.Exists(x => x.NGTYPE == 1);  //判断List是否存在NGTYPE为1的元素

 List进行sum或者其他运算,剔除值中为null的数据

var cycleDay = list.Where(u => u.CropTypeId ==typeId).Select(p => p.CycleDay).DefaultIfEmpty().Sum();

var cycleDay = list.Where(u => u.CropTypeId == typeId).Sum(p => (p.CycleDay == null ? 0 : p.CycleDay));

DataTable中使用Select()方法找出interval最大的那条数据

DataRow[] oTmp = dt.Select("interval = max(interval)");

DataTable中Select()方法筛选不等于某条件的数据(使用"<>",不能使用“!=”,会报错)

DataRow[] drs = dt.Select(string.Format(" type<> '{0}' ","2"));

以某字段为查询条件,查询DataTable中符合条件的数据

DataRow[] drs = dt.AsEnumerable().Where<DataRow>(m => m["name"].Equals("小明")).ToArray();   //找出DataTable中name为小明的数据

查询DataRow[]中某列的值,取DataRow中第一个值

var unloadtime = drs.AsEnumerable().Select(t => t.Field<string>("unloadtime")).FirstOrDefault().ToString();

数组中以多个字段分组,再以某字段升序排序,再取第一个(以MODEL,PATTERN分组,再以ACCEPTTIME升序排序)

var arrFlowData = arrMESFlowData.AsEnumerable().GroupBy(t => new { t.MODEL, t.PATTERN }).Select(t => t.OrderBy(x => x.ACCEPTTIME).FirstOrDefault());

List中以Hours降序,再以DssCode升序排序(先按Hours降序,如果Hours相同再按DssCode升序。如果Hours为null或者为空,排序会出现混乱,待解决 O(≧口≦)O)

List<DMDXMould> list = dmdxDetail.listMouldLoad.OrderByDescending(t => t.Hours).ThenBy(t => t.DssCode).ToList();

从DataTable中取出某列的值并返回一个List<int>集合

var list =dt.AsEnumerable().Select<DataRow, int>(x => Convert.ToInt32(x["列名"])).ToList<int>();

DataTable使用Where筛选并排序(根据no和code筛选,再根据date和time降序排序) 

DataRow[] drs = dt.AsEnumerable().Where<DataRow>(t => t["no"].Equals("FU123456") && t["code"].Equals("LFMJ03")).OrderByDescending(t => t["date"]).ThenByDescending(t => t["time"]).ToArray();

分组

// 实现多key分组的扩展函数版本
var sums = empList
         .GroupBy(x => new { x.Age, x.Sex })
         .Select(group => new {
            Peo = group.Key, Count = group.Count()
         });
foreach (var employee in sums) {
   Console.WriteLine(employee.Count + ": " + employee.Peo);
}

// 实现多key分组的lambda版本
var sums2 = from emp in empList
            group emp by new { emp.Age, emp.Sex } into g
            select new { Peo = g.Key, Count = g.Count() };
foreach (var employee in sums) {
   Console.WriteLine(employee.Count + ": " + employee.Peo);
}

//充分利用了匿名类型
varListByOwner= list.GroupBy(l => l.Owner)
                          .Select(lg =>
                                new{
                                    Owner= lg.Key,
                                    Boxes= lg.Count(),
                                    TotalWeight= lg.Sum(w => w.Weight),
                                    TotalVolume= lg.Sum(w => w.Volume)
                                });

 var q =from b in listOfBoxes
                group b by b.Ownerinto g
                selectnew
                           {
                               Owner= g.Key,
                               Boxes= g.Count(),
                               TotalWeight= g.Sum(item => item.Weight),
                               TotalVolume= g.Sum(item => item.Volume)
                           };

 连接查询

//Linq实现左连接
DataClasses1DataContext db = new DataClasses1DataContext();
var leftJoinSql = from student in db.Student
                  join book in db.Book on student.ID equals book.StudentID into temp
                  from tt in temp.DefaultIfEmpty()
                  select new
                   {
                       sname= student.Name,
                       bname = tt==null?"":tt.Name//这里主要第二个集合有可能为空。需要判断
                   };
//Linq实现右连接
DataClasses1DataContext db=new DataClasses1DataContext();
var rightJoinSql = from book in db.Book
                   join stu in db.Student on book.StudentID equals stu.ID into joinTemp
                   from tmp in joinTemp.DefaultIfEmpty()
                   select new { 
                      sname=tmp==null?"":tmp.Name,
                      bname=book.Name
                    };

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值