zoukankan      html  css  js  c++  java
  • C# Lambda表达式和linq表达式 之 匿名对象查询接收

    很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴

    对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行

    条件筛选呢?常规用法我就不说了,我们来说一下匿名对象怎么操作。

    我们先看一下Lambda表达式的形式:

    Lambda表达式 说明
    x=>x*x 返回参数值的平方
    x=>{return x*x;} 返回参数值的平方。主体是语句块
    int(x)=>x/2 返回参数值除以2的结果
    {}=>folder.StopFolding(0) 调用一个方法,表达式不获取参数。表达式可能会、也可能不会返回值
    (x,y)=>{x++;return x/y;} 多个参数,编译器自己推导参数类型。参数x是以值得形式传递的,所以+ +操作的效果是局部于表达式
    (ref int x,y){X++;returnx/y;} 多个 参数,都显示指定类型。参数x的类型是以引用的形式传递的,所以+ +操作的效果是永久性的

    然后用过Dictionary<>的童鞋都知道,它的循环取值是 item["列名"],那么我们也可以使用这种方式

    进行操作,且看如下代码:

    List<Dictionary<string, object>> Listdict = new List<Dictionary<string, object>>();
    Dictionary<string, object> dict1 = new Dictionary<string, object>();
    dict1.Add("Id", 1);
    dict1.Add("name", "老大");
    dict1.Add("avg", 5);
    Listdict.Add(dict1);
    Dictionary<string, object> dict2 = new Dictionary<string, object>();
    dict2.Add("Id", 2);
    dict2.Add("name", "老二");
    dict2.Add("avg", 10);
    Listdict.Add(dict2);
    Dictionary<string, object> dict3 = new Dictionary<string, object>();
    dict3.Add("Id", 3);
    dict3.Add("name", "老三");
    dict3.Add("avg", 20);
    Listdict.Add(dict3);
    Dictionary<string, object> dict4 = new Dictionary<string, object>();
    dict3.Add("Id", 3);
    dict3.Add("name", "老四");
    dict3.Add("avg", 30);
    Listdict.Add(dict4);

    //1:查询Id等于2的用户
    //Lambda表达式(与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称为点标记)。
    var temp = Listdict.Where(it => { return Convert.ToInt32(it["Id"]) == 2; }).ToList();

    //2:查询avg大于9的和
    //Lambda表达式(与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称为点标记)。
    var temp2 = Listdict.Where(it => { return Convert.ToInt32(it["avg"]) > 9; }).Sum(it => Convert.ToInt32(it["avg"]));

    //linq表达式 (查询表达式)
    var temp3 = (from it in Listdict where Convert.ToInt32(it["avg"]) > 9 select Convert.ToInt32(it["avg"])).Sum();

    //3、排序
    Listdict = Listdict.OrderByDescending(it => Convert.ToInt32(it["Id"])).ToList();

    //联接(这里只展示内联接)Join
    var temp5 = from a in Listdict
    join b in Listdict
    on a["Id"] equals b["Id"]
    select new
    {
    Id = a["Id"],
    Name = a["name"],
    avg = a["avg"]
    };

    看了上面的是不是突然觉得茅塞顿开,他的不同点只是匿名对象的列名和实体的列名获取方式不一样罢了。

    小伙伴们快去试试吧!发现更多应用可以留言讨论哦^_^

    欢迎关注订阅我的微信公众平台【熊泽有话说】,更多好玩易学知识等你来取
    作者:熊泽-学习中的苦与乐
    公众号:熊泽有话说
    出处:https://www.cnblogs.com/xiongze520/p/10288861.html
    创作不易,任何人或团体、机构全部转载或者部分转载、摘录,请在文章明显位置注明作者和原文链接。  

     

  • 相关阅读:
    我的省选 Day -9
    我的省选 Day -10
    我的省选 Day -11
    我的省选 Day -12
    我的省选 Day -13
    [NOI2013]快餐店
    我的省选 Day -14
    杭电多校2020第7场-E Expectation
    「联合省选2020」组合数问题
    UR#19 通用评测号
  • 原文地址:https://www.cnblogs.com/xiongze520/p/10288861.html
Copyright © 2011-2022 走看看