【转】Linq表达式、Lambda表达式你还欣赏谁?【转】Linq表达式、Lambda表达式你再欣赏谁?

【转】Linq表达式、Lambda表达式你再度爱好谁?

【转】Linq表达式、Lambda表达式你更欣赏哪个?

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

如图:

图片 1

由此可见Linq表达式和Lambda表达式并从未啊可比性

那跟Lambda表达式相关的整条语句称作什么也?在微软连不曾受来官的命名,在《深入理解C#》中称为点标记

图片 2

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

如图:

图片 3

有鉴于此Linq表达式和Lambda表达式并没什么可比性

那么和Lambda表达式相关的整条语句称作什么啊?在微软并从未被起官的命名,在《深入理解C#》中称为点标记

图片 4

查询表达式、点标记你再次欣赏哪个?

就此,我们的题的问讯根本就是非适合。应该是“查询表达式和接触标记你还欣赏哪个?”。如:

 //查询表达式
 var students1 = from t in db.Students
                where t.Name == "张三"
                select new { t.Id, t.Name, t.Age };
 //点标记
 var students2 = db.Students
                 .Where(t => t.Name == "张三")
                 .Select(t => new { t.Id, t.Name, t.Age });

询问表达式、点标记你又爱谁?

因此,我们的标题的咨询根本就非确切。应该是“询问表达式和点标记你重新爱谁?”。如:

 //查询表达式
 var students1 = from t in db.Students
                where t.Name == "张三"
                select new { t.Id, t.Name, t.Age };
 //点标记
 var students2 = db.Students
                 .Where(t => t.Name == "张三")
                 .Select(t => new { t.Id, t.Name, t.Age });

怎么选点标记 

自家深信不疑又多之人偏偏于选择点标记。具体什么由我也说不清(可能是点标记中的Lambda更加文雅吧)。对于自身个人来说,也是尤为喜欢点标记这种措施。

1、所有的询问表达式都足以更改成相应的接触标记。反之,不是有所的点标记都得更改成为查询表达式。

为何?因为查询表达式在编译后就径直成为了碰标记:(以下是面两只话对应之编译后的反编译C#代码)

图片 5

扭转了一致模子一样的代码。(由于是编译后底,好多混七八糟的代码。我们只拘留Where和Select关键字就知晓,使用的都是点标记。)

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

例一:

 //查询表达式
 var students1 = from t in db.Students
                 where t.Name == "张三"
                 select t;
 //点标记
 var students2 = db.Students
                 .Where(t => t.Name == "张三");

本身胡一定要是 select
好家伙,这句没卵用的废话就非可知看为?是的,省了即报错:

图片 6

例二:

不能不待括号包裹起来才会得结果集?你还能再次可恨一点也?

//查询表达式
var students1 = (from t in db.Students
                 where t.Name == "张三"
                 select t).ToList();
//点标记
var students2 = db.Students
                .Where(t => t.Name == "张三")
                .ToList();       

例三:(为什么说:”不是富有的点标记都得以改变成为查询表达式”【此例只适用于IEnumerator】)

此条点标记你能够改变成为查询表达式吗?

var list = new List<string>() { "张三", "张三", "张三", "张三", "李四", "张三", "李四", "张三", "李四" };

var students2 = list
                .Where((item, index) => item == "张三" && index % 2 == 0)
                .Select((item, index) => new { item, index })
                .ToList();

询问表达式你能够Reverse吗?

var list = new List<string>() { "张三1", "张三2", "张三3", "张三0", "李四9", "张三3", "李四", "张三2", "李四" };

var students2 = list
             .Where((item, index) => item.Contains("张三"))
             .Select((item, index) => new { item, index })
             .Reverse()//反序
             .ToList();

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

 

为何选择点标记 

自深信还多的人头偏偏于选择点标记。具体什么原因我为说不清(可能是触发标记中的Lambda更加文雅吧)。对于自个人来说,也是更进一步喜欢点标记这种办法。

1、所有的询问表达式都好转移成对应的触及标记。反之,不是有着的接触标记都可转移成查询表达式。

缘何?因为查询表达式在编译后就是一直变成了接触标记:(以下是上面两个话对应的编译后底反编译C#代码)

图片 7

变迁了同等型一样的代码。(由于是编译后的,好多乱七八糟七八糟的代码。我们就拘留Where和Select关键字就算掌握,使用的还是触发标记。)

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

例一:

 //查询表达式
 var students1 = from t in db.Students
                 where t.Name == "张三"
                 select t;
 //点标记
 var students2 = db.Students
                 .Where(t => t.Name == "张三");

自家干什么一定要是 select
嘿,这句没卵用的废话就不可知看吧?是的,省了不畏报错:

图片 8

例二:

非得得括号包裹起来才会得结果集?你还能够更臭一点乎?

//查询表达式
var students1 = (from t in db.Students
                 where t.Name == "张三"
                 select t).ToList();
//点标记
var students2 = db.Students
                .Where(t => t.Name == "张三")
                .ToList();       

例三:(为什么说:”不是具备的接触标记都得改成为查询表达式”【此例只适用于IEnumerator】)

此条点标记你能转成为查询表达式吗?

var list = new List<string>() { "张三", "张三", "张三", "张三", "李四", "张三", "李四", "张三", "李四" };

var students2 = list
                .Where((item, index) => item == "张三" && index % 2 == 0)
                .Select((item, index) => new { item, index })
                .ToList();

询问表达式你会Reverse吗?

var list = new List<string>() { "张三1", "张三2", "张三3", "张三0", "李四9", "张三3", "李四", "张三2", "李四" };

var students2 = list
             .Where((item, index) => item.Contains("张三"))
             .Select((item, index) => new { item, index })
             .Reverse()//反序
             .ToList();

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

 

嘿时候用查询表达式?

通过者的对照,好像查询表达式一文不值了。no,不是这么的。

仍下面几乎栽情景咱便可以选择用查询表达式:

例一:本例适用于Linq to Object 和
没有建主外键的EF查询

接触标记中的Join需要传四只参数表达式,是匪是起点晕了。。。

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };

//查询表达式
var obj1 = from l1 in list1
           join l2 in list2
           on l1.Key equals l2.Key
           select new { l1, l2 };
//点标记
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 });

例二:

点标记需要区分OrderBy、ThenBy有没有产生当辛苦

//查询表达式
var obj1 = from l1 in list1
           join l2 in list2
           on l1.Key equals l2.Key
           orderby l1.Key, l2.Key descending
           select new { l1, l2 };
//点标记
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 })
    .OrderBy(li => li.l1.Key)
    .ThenByDescending(li => li.l2.Key)
    .Select(t => new { t.l1, t.l2 });

总认为查询表达式更多之但是以看那些状惯了sql的程序员。

啊时候利用查询表达式?

由此地方的相比,好像查询表达式一文不值了。no,不是这样的。

遵下面几乎种植状况我们就算好择采取查询表达式:

例一:本例适用于Linq to Object 和
没有建主外键的EF查询

点标记中之Join需要传四单参数表达式,是未是生点晕了。。。

var list1 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "张三" }, { "4", "张三" } };
var list2 = new Dictionary<string, string> { { "1", "张三" }, { "2", "李四" }, { "3", "李四" }, { "4", "张三" } };

//查询表达式
var obj1 = from l1 in list1
           join l2 in list2
           on l1.Key equals l2.Key
           select new { l1, l2 };
//点标记
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 });

例二:

接触标记需要区分OrderBy、ThenBy有无发出看累

//查询表达式
var obj1 = from l1 in list1
           join l2 in list2
           on l1.Key equals l2.Key
           orderby l1.Key, l2.Key descending
           select new { l1, l2 };
//点标记
var obj = list1.Join(list2, l1 => l1.Key, l2 => l2.Key, (l1, l2) => new { l1, l2 })
    .OrderBy(li => li.l1.Key)
    .ThenByDescending(li => li.l2.Key)
    .Select(t => new { t.l1, t.l2 });

归根结底看查询表达式更多之单独是为了照顾那些状惯了sql的程序员。

对接查询(内联、左联、交叉联)

至于联接查询利用查询表达式会再度适于一些这个点都说了。

连通下我们描绘内联、左联、交叉联的查询表达式和对应之点标记代码。(目的:可能小人非会见,同时于这边呢深受协调举行个备忘)

内联:

图片 9

左联:

图片 10

交叉联:

图片 11

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

 

结束:

正文并无是使改变您的惯,也无是否定而的意见。仅仅只是表达个人对点标记和查询表达式的微理解。

有关凡动查询表达式还是沾标记,可能由在再要命决定性的意的凡团伙一同的习惯跟业内。

下一场还眷恋说说,只要我们相比什么,很可能就见面有人跳出了,什么绝不比,用好了还相同,什么呀才是极其要之,什么哟的。。。

即使比如许多丁会面倒感java和C#的对照,其实我个人认为比下底层实现、对比下语法简易也非是不可以的,只要我们可从中学到知识(个人吗是免喜对比
谁哪个哪个模仿啊工资多少有点)。

昨日的要好相比今天底好,今天的自己对比明天底温馨。只要可以提高为什么不用对比吧?

 

本文为同到《C#基础知识巩固系列》

属查询(内联、左联、交叉联)

至于联接查询利用查询表达式会另行适于一些这个地方就说了。

接下去我们形容内联、左联、交叉联的询问表达式和呼应的触发标记代码。(目的:可能有些人不见面,同时于此地为被协调举行只备忘)

内联:

图片 12

左联:

图片 13

交叉联:

图片 14

实在关于联接查询,如果EF建好了主外键我要么认为点标记用起来又爽爽的。

 

结束:

正文并无是使改变您的习惯,也非是否认而的视角。仅仅只是表达个人对点标记和询问表达式的粗理解。

有关凡用查询表达式还是接触标记,可能于在再充分决定性的来意的是团共同的惯及正规。

接下来还想说说,只要我们相比什么,很可能就见面有人跳出了,什么绝不比,用好了都一律,什么啊才是无与伦比紧要之,什么什么的。。。

即使比如许多口见面倒感java和C#的对照,其实我个人认为比下底层实现、对比下语法简易也未是不得以的,只要我们得以从中学到文化(个人为是不喜对比
谁哪个哪个模仿呀工资稍有点)。

昨日之友爱比今天底要好,今天之好对待明天底团结。只要可以提高为什么不要对比为?

 

正文为合到《C#基础知识巩固系列》

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website