c# linq用法_文言文中而的用法及例句

c# linq用法_文言文中而的用法及例句记录C#中Linq的常用用法,方便使用时查找

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

1、linq中交集、并集、差集的用法

简单的交集、并集、差集用法如下:

List<string> ListA = new List<string>();
List<string> ListB = new List<string>();
List<string> ListResult = new List<string>();

ListResult = ListA.Distinct().ToList();//去重
ListResult = ListA.Except(ListB).ToList();//差集
ListResult = ListA.Union(ListB).ToList();  //并集
ListResult = ListA.Intersect(ListB).ToList();//交集

Jetbrains全家桶1年46,售后保障稳定

若上面的例子不是List<string>类型,而是List<XXXModel>,则需要对XXXModel进行处理。
步骤如下:
(1)先定义Model。

    public class ItemModel
    { 
   
        public string ItemCode { 
    get; set; }
        public string ItemName { 
    get; set; }
    }

(2)定义如何Model间如何比较。若不定义,比较的是两个引用。

public class ItemModelComparer : IEqualityComparer<ItemModel>
{ 
   
        //比较
        public bool Equals(ItemModel x, ItemModel y)
        { 
   
            bool checkFlag = true;

            if (Object.ReferenceEquals(x, y))
            { 
   
                checkFlag = true;
            }
            else if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
            { 
   
                checkFlag = false;
            }
            else
            { 
   
                if (x.ItemCode == y.ItemCode) //若Model有多个条件则需要添加。例如 if(x.ItemCode==y.ItemCode && x.Other==y.Other)
                { 
   
                    checkFlag = true;
                }
                else
                { 
   
                    checkFlag = false;
                }
            }

            return checkFlag;

        }
    
        //实现获取哈希值
        public int GetHashCode(ItemModel model)
        { 
   
            if (Object.ReferenceEquals(model, null)) return 0;
            int hashNurse = model.ItemCode.GetHashCode(); 

// 若有多个条件,则哈希值也需要进行计算
// int hashOther=model.Other.GetHashCode();
// int resultHash=hashNurse^hashOther;
// return resultHash;

            return hashNurse;
        }
    
    }

(3)具体使用如下

List<ItemModel> ListA = new List<ItemModel>();
List<ItemModel> ListB = new List<ItemModel>();
List<ItemModel> ListResult = new List<ItemModel>();

ListResult = ListA.Distinct(new ItemModelComparer()).ToList();//去重
ListResult = ListA.Except(ListB, new ItemModelComparer()).ToList();//差集
ListResult = ListA.Union(ListB, new ItemModelComparer()).ToList();  //并集
ListResult = ListA.Intersect(ListB, new ItemModelComparer()).ToList();//交集

2、 join的用法

若出现两个List,想用Linq进行查询。则可以使用如下的方式

int tempSatisfiedConditionCount = (from r1 in whiteList
                                   join r2 in args.DiagList on r1.DiagCode equals r2.DiagCode
                                   select r1).Count();

多条件的join

//多条件的联合查核
List<DiagControlModel> whiteDiagList = (from r1 in diagControlList
        where r1.ControlRelation == 1
        join r2 in args.DiagList on new { 
    code = r1.DiagCode, name = r1.DiagName }
        equals new{ 
   code=r2.DiagCode,name=r2.DiagName}
        select r1).ToList<DiagControlModel>();

另外,join还可以用于左连接/右连接

var LeftJoin = from emp in ListOfEmployees
                join dept in ListOfDepartment
                 on emp.DeptID equals dept.ID into JoinedEmpDept
                from dept in JoinedEmpDept.DefaultIfEmpty()
                 select new
                      {
                            EmployeeName = emp.Name,
                            DepartmentName = dept != null ? dept.Name : null
                      };

3、let用法

let是一个在linq中定义局部变量
1、可以有多个let子句
2、let后的变量无需声明类型
参见下例:

var query = from a in list  
                        let b = a.Name.Split('-')  
                        let c=a.Age  
                        where b[0] =="zhangs" & c>21  
                        select a; 

4、分组

常用的分组用法:

      var linqtest = from r in db.Am_recProScheme
                     orderby r.rpId descending
                     group r by r.recType into n
                     select new
                     {
                         n.Key,  //这个Key是recType
                         rpId = n.Sum(r => r.rpId), //组内rpId之和
                         MaxRpId = n.Max(r => r.rpId),//组内最大rpId
                         MinRpId = n.Min(r => r.rpId), //组内最小rpId
                     };

略微复杂点:

	             var dataList= (from r in drugLabelList
                                    group r by new
                                    {
                                        r.OrderNo,
                                        r.PatientID,
                                        r.PatientName
                                    } into q
                                    let drugAmount = q.Sum(t => Convert.ToInt32(t.ChargeAmount))
                                    where drugAmount >= 0
                                    select new PrintDrugLabelModel
                                    {
                                        OrderNo = q.Key.OrderNo,
                                        PatientID = q.Key.PatientID,
                                        PatientName = q.Key.PatientName,
                                        ChargeAmount = ""+drugAmount
                                    }).ToList<PrintDrugLabelModel>();

5、简单的函数计算

      var linqtest = (from r in db.Am_recProScheme
                      select r).Sum(p => p.rpId);

6、排序order by desc/asc

     var linqtest = (from r in db.Am_recProScheme
                     where r.rpId > 10
                     orderby r.rpId descending  //倒序
                     // orderby r.rpId, r.rpname descending   //多条件的倒序(与SQL语句中的相同)
                     //  orderby r.rpId ascending   //正序
                     select r);

7、top(1)

            //如果取最后一个可以按倒叙排列再取值
      var linqtest = (from r in db.Am_recProScheme                     
                      select r).FirstOrDefault();

8、跳过前面多少条数据取余下的数据

      var linqtest = (from r in db.Am_recProScheme
                      where r.rpId > 10
                      orderby r.rpId descending
                      select r).Skip(10).Take(10); //取第11条到第20条数据  

9、包含

	   //可以使用List、Array、string的Contains()方法进行判断
     var linqtest = (from r in db.Am_recProScheme
                     where r.SortsText.Contains("张")
                     select r);

10、连接查询

      var linqtest = (from r in db.Am_recProScheme
                     join w in db.Am_Test_Result on r.rpId equals w.rsId
                     orderby r.rpId descending
                     select r);

11、使用linq查询DataTable

            //遍历DataTable,将其中的数据对应到ClientStruct中:  
            List<ClientStruct> list = (from x in dtTable.AsEnumerable()  
                                       orderby x.Field<string>("")  descending  
                                       where x.Field<string>("ErrorType") == "漏孔" 
                                       select new ClientStruct  
                                       {  
                                           ID = x.Field<string>(cs.ID),  
                                           Name = x.Field<string>(cs.Name),  
                                           Company = x.Field<string>(cs.Company),  
                                           CreatedDate = x.Field<string>(cs.CreatedDate)  
                                       }).ToList<ClientStruct>();  

12、linq中列传行操作(Aggregate的使用)—2022-3-4

解决分组又聚合的问题。
后台数据存储的样式是:
在这里插入图片描述
希望实现:
在这里插入图片描述
即:实现分组,并且能将诊断进行聚合(列转行)
linq的写法如下:

var data_list = (from r in temp_result_list
                 group r by new
                      { 
   
                          r.DrugCode,
                          r.VisitType
                      } into q
                  select q.Aggregate(temp_result_list[0],(workingSentence, next) => new DiagControlModel
                  { 
   
                      DrugCode = q.Key.DrugCode,
                      VisitType = q.Key.VisitType,
     								DiagInfoStr =  workingSentence.DiagInfoStr + ";" + next.DiagName
                  })).ToList<DiagControlModel>();

Aggregate的具体说明,参见官网Aggregate方法说明

参考:博客园的张龙豪博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/207124.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 查看Linux端口占用,并kill掉相关进程「建议收藏」

    话不多说,本文介绍Linux常规操作:查看端口占用进程,根据PIDkill掉相关进程。另外补充:根据程序名查看进程PID。首先,两条命令,lsof命令和netstat命令。方式一:lsof命令1、查看占用端口进程的PID:lsof-i:{端口号}2、根据PIDkill掉相关进程:kill-9{PID}方式二:net…

  • 全套电商ERP源代码出售,电商ERP管理系统、电商仓储管理系统、电商分销管理系统[通俗易懂]

    全套电商ERP源代码出售,电商ERP管理系统、电商仓储管理系统、电商分销管理系统[通俗易懂]技术架构:后端C#.net4.5ORMWEBAPI分布式REDIS,前端:VUEAntDesignAggrid(前后端完全分离)1,产品定位:电商ERP管理系统、电商仓储管理系统、电商分销管理系统2,对接了淘宝天猫、京东、拼多多等主流电商平台50+3,多租户4,分布式5,单客户日均100万数据处理能力6,完整导入导出方案7,前端界面自动生成(表格、搜索条件、编辑字段)8,完整开放平台9,微信小程序10,高度可定制的打印方案11,核心功能模块:订单管

  • java http get 发送数据

    java http get 发送数据

  • 如何开发股票软件情报分析功能101[通俗易懂]

    如何开发股票软件情报分析功能101[通俗易懂]各种情报铺天盖地,真真假假,虚虚实实,很多是庄家的托放出来的假情报。数据的解读也是一样,各种数据铺天盖地。但是东方大国股市的反应是真的,本周下跌趋势是真的。各种数据和情报分析就是很重要的功能,对于股票软件开发而言。哪些是假情报,哪些是真实的数据,就需要认真分析,不能一股脑传递给散户。突围!国内外局势正发生巨大转向!https://mu.mbd.ba…

  • 面试基础知识整理

    面试基础知识整理写在前面:3月伊始便经历了几次笔面试,深深感到自己知识储备的不足,痛下决心,在期末考试前一周,着手整理基础知识,希望可以对接下来的笔面试以及秋招有所帮助。本系列文章涉及数据结构及算法均使用Java语言描述。本文系基础知识整理,文章内容多来源于各经典书籍。本系列文章不定期更新,希望我可以有毅力完成这一工作。1.数据结构数组链表栈队列数图堆2.

  • TCP、UDP绑定同一端口通信的解释

    TCP、UDP绑定同一端口通信的解释昨日突然讨论起TCP与UDP是否可以在同一端口进行绑定,通信。在印象当中我记得是可以的,今日google了相关资料,确定以及肯定的:TCP、UDP可以绑定同一端口来进行通信:       网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。       按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号