加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Linq表达式、Lambda表达式你更喜欢哪个?

发布时间:2020-12-15 04:44:09 所属栏目:百科 来源:网络整理
导读:什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见 Linq表达式和Lambda表达式并没有什么可比性 。 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称为 点标记 。 查询表达式、点标记你更喜欢哪个? 所以

什么是Linq表达式?什么是Lambda表达式?

如图:

由此可见Linq表达式和Lambda表达式并没有什么可比性

那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在《深入理解C#》中称为点标记

查询表达式、点标记你更喜欢哪个?

所以,我们的标题的提问根本就不合适。应该是“查询表达式和点标记你更喜欢哪个?”。如:

students1 = t t.Name == students2 ==> t.Name == => { t.Id,t.Age });

为什么选择点标记?

我相信更多的人偏向选择点标记。具体什么原因我也说不清()。对于我个人来说,也是更加喜欢点标记这种方式。

1、所有的查询表达式都可以转成对应的点标记。

为什么?因为查询表达式在编译后就直接变成了点标记:(

生成了一模一样的代码。(

2、点标记确实比查询表达式更加优雅

例一:

students1 = t t.Name == students2 ==> t.Name == );

? t?

例二:

必须需要括号包裹起来才能取结果集?你还能更丑一点吗?

students1 = ( t t.Name == students2 ==> t.Name ==

例三::"不是所有的点标记都可以转成查询表达式"【此例只适用于IEnumerator】)

list = List<>() { ,,,<span style="color: #0000ff;">var students2 =<span style="color: #000000;"> list
.Where((item,index)
=> item == <span style="color: #800000;">"
<span style="color: #800000;">张三
<span style="color: #800000;">"
&& index % <span style="color: #800080;">2
== <span style="color: #800080;">0
<span style="color: #000000;">)
.Select((item,index)
=> <span style="color: #0000ff;">new
<span style="color: #000000;"> { item,index })
.ToList();

list = List<>() { ,,,,,<span style="color: #0000ff;">var students2 =<span style="color: #000000;"> list
.Where((item,index)
=> item.Contains(<span style="color: #800000;">"
<span style="color: #800000;">张三
<span style="color: #800000;">"
<span style="color: #000000;">))
.Select((item,index })
.Reverse()
<span style="color: #008000;">//
<span style="color: #008000;">反序

.ToList();

ListA.Distinct().ToList(); ListA.Except(ListB).ToList(); ListA.Union(ListB).ToList(); ListA.Intersect(ListB).ToList();

什么时候使用查询表达式?

通过上面的对比,好像查询表达式一文不值了。no,不是这样的。

比如下面几种情况我们就可以选择使用查询表达式:

例一:

点标记中的Join需要传四个参数表达式,是不是有点晕了。。。

list1 = Dictionary<,> { { , },{ , },{ ,{ , list2 = Dictionary<,<span style="color: #008000;">//<span style="color: #008000;">查询表达式
<span style="color: #0000ff;">var
obj1 = <span style="color: #0000ff;">from
l1 <span style="color: #0000ff;">in
<span style="color: #000000;"> list1
join l2
<span style="color: #0000ff;">in
<span style="color: #000000;"> list2
on l1.Key equals l2.Key
<span style="color: #0000ff;">select
<span style="color: #0000ff;">new
<span style="color: #000000;"> { l1,l2 };
<span style="color: #008000;">//
<span style="color: #008000;">点标记

<span style="color: #0000ff;">var
obj = list1.Join(list2,l1 => l1.Key,l2 => l2.Key,(l1,l2) => <span style="color: #0000ff;">new
{ l1,l2 });

例二:

点标记需要区分OrderBy、ThenBy有没有觉得麻烦

obj1 = l1 =>=>=> { t.l1,t.l2 });

总觉得查询表达式更多的只是为了照顾那些写惯了sql的程序员。

联接查询

关于联接查询使用查询表达式会更合适一些这个上面已经说了。

接下来我们写内联、左联、交叉联的查询表达式和对应的点标记代码。(目的:可能有些人不会,同时在这里也给自己做个备忘)

内联:

交叉联:

其实关于联接查询,如果EF建好了主外键我还是觉得点标记用起来更爽爽的。

结束:

关于是使用查询表达式还是点标记,可能起着更大决定性的作用的是团队共同的习惯和规范。

然后还想说说,只要我们对比什么,很可能就会有人跳出了,什么不要比,用好了都一样,什么什么才是最重要的,什么什么的。。。

就像很多人会反感java和C#的对比,其实我个人觉得对比下底层实现、对比下语法简易也不是不可以的,只要我们可以从中学到知识()。

昨天的自己对比今天的自己,今天的自己对比明天的自己。只要可以进步为什么不要对比呢?

本文以同步至《》

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读