【转】Linq表达式、拉姆da表明式你更欣赏哪个?

【转】Linq表明式、Lambda表达式你更爱好哪个?

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

如图:

图片 1

由此可见Linq表明式和Lambda表明式并从未什么样可比性

那与拉姆da表明式相关的整条语句称作什么啊?在微软并没有提交官方的命名,在《深刻精通C#》中称为点标记

图片 2

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

如图:

图片 3

综上可得Linq表达式和拉姆da表达式并不曾什么样可比性

那与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尤其文雅吧)。对于自个儿个人来说,也是尤为喜欢点标记那种措施。

一 、全数的询问表达式都能够转成对应的点标记。反之,不是独具的点标记都足以转成查询表明式。

为啥?因为查询表达式在编写翻译后就直接变成了点标记:(以下是地点七个语句对应的编写翻译后的反编译C#代码)

图片 5

转变了一模一样的代码。(由于是编写翻译后的,好多一无可取的代码。大家只看Where和Select关键字就精通,使用的都以点标记。)

贰 、点标记确实比查询表明式尤其文雅

例一:

 //查询表达式
 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越发文雅吧)。对于本身个人来说,也是更进一步喜欢点标记那种艺术。

壹 、全体的询问表明式都足以转成对应的点标记。反之,不是具备的点标记都可以转成查询表达式。

为什么?因为查询表达式在编译后就径直变成了点标记:(以下是上面四个语句对应的编写翻译后的反编写翻译C#代码)

图片 7

变化了一模一样的代码。(由于是编写翻译后的,好多乌烟瘴气的代码。大家只看Where和Select关键字就驾驭,使用的都以点标记。)

二 、点标记确实比查询表明式尤其文雅

例一:

 //查询表达式
 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 });

总认为查询表明式越多的只是为着照顾那3个写惯了sql的程序员。

连着查询(内联、中国左翼诗人联盟、交叉联)

至于联接查询利用查询表明式会更妥贴一些以此上边已经说了。

接下去我们写内联、中国左翼散文家联盟、交叉联的查询表明式和对应的点标记代码。(指标:大概有点人不会,同时在此地也给本人做个备忘)

内联:

图片 9

左联:

图片 10

交叉联:

图片 11

实际关于联接查询,假若EF建好了主外键作者可能认为点标记用起来更爽爽的。

 

结束:

本文并不是要转移你的习惯,也不是不是定你的视角。仅仅只是表明个人对点标记和查询表明式的有个别明白。

关于是采取查询表明式照旧点标记,可能起着更大决定性的机能的是团伙联手的习惯和正规。

下一场还想说说,只要大家相比怎么着,十分的大概就会有人跳出了,什么绝不比,用好了都一律,什么怎么才是最关键的,什么什么的。。。

就像是许四人会反感java和C#的对照,其实笔者个人认为相比下底层完成、比较下语法简易也不是不得以的,只要大家得以从中学到知识(个人也是不喜欢相比较何人什么人何人学什么薪酬多少多少)。

今天的投机对待今天的要好,后天的要好对待前天的团结。只要能够升高为何不用相比吧?

 

正文以协同至《C#基础知识巩固连串

紧接查询(内联、中国左翼作家联盟、交叉联)

有关联接查询利用查询表明式会更适于一些这几个地点已经说了。

接下去大家写内联、中国左翼诗人联盟、交叉联的询问表明式和呼应的点标记代码。(指标:或者某个人不会,同时在此地也给协调做个备忘)

内联:

图片 12

左联:

图片 13

交叉联:

图片 14

实在关于联接查询,假使EF建好了主外键我依旧觉得点标记用起来更爽爽的。

 

结束:

正文并不是要改成您的习惯,也不是不是认你的见解。仅仅只是表明个人对点标记和询问表达式的有点驾驭。

有关是应用查询表达式依旧点标记,大概起着更大决定性的成效的是团队一起的习惯和正式。

接下来还想说说,只要大家相比较怎么着,很可能就会有人跳出了,什么绝不比,用好了都一点差异也没有,什么什么才是最根本的,什么什么样的。。。

就像是许多个人会反感java和C#的自己检查自纠,其实小编个人觉得比较下底层实现、相比下语法简易也不是不可能的,只要大家得以从中学到知识(个人也是不欣赏比较哪个人什么人何人学如何工资多少有点)。

前天的友好相比较前几天的友好,明天的友爱比较之下前天的友爱。只要能够发展为何不用相比呢?

 

本文以三头至《C#基础知识巩固连串

相关文章

网站地图xml地图