为了账号安全,请及时绑定邮箱和手机立即绑定

C# Lambda表达式和linq表达式 之 匿名对象查询接收

标签:
C#

很多小伙伴都用过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 

作者:学习中的苦与乐 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消