当前位置: 移动技术网 > IT编程>开发语言>.net > C# Lambda表达式和linq表达式 之 匿名对象查询接收

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

2019年01月19日  | 移动技术网IT编程  | 我要评论

油麦菜的做法,毁灭大唐之异能高手,迷人的火塘

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

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

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

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网