Lambda表明式你更爱好哪个葡萄娱乐场

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

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

如图:

葡萄娱乐场 1

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

那与Lambda表明式相关的整条语句称作什么吧?在微软并从未交到官方的命名,在《深切精晓C#》中称为点标记

葡萄娱乐场 2

查询表达式、点标识你更欣赏哪个?

故此,我们的题指标讯问根本就不对劲。应该是“询问表达式和点标识你更爱好哪个?”。如:

 //查询表达式
 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更Gavin雅吧)。对于笔者个人来讲,也是特别喜欢点标识这种格局。

1、全部的查询表明式都足以转成对应的点标识。反之,不是颇具的点标识都足以转成查询表明式。

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

葡萄娱乐场 3

转移了一模二样的代码。(由于是编写翻译后的,多数非常不佳的代码。我们只看Where和Select关键字就知道,使用的都以点标志。)

2、点标志确实比查询表明式更Gavin雅

葡萄娱乐场,例一:

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

自个儿为什么必须要 select
啊,那句没卵用的废话就不能够省吗?是的,省了就报错:

葡萄娱乐场 4

例二:

总得须求括号包裹起来能力取结果集?你仍是可以够更丑一点吧?

//查询表达式
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的工程师。

连着查询(内联、中国左翼小说家联盟、交叉联)

关于联接查询利用查询表明式会更确切一些这些地点已经说了。

接下去大家写内联、左联、交叉联的询问表明式和呼应的点标志代码。(指标:也许某一个人不会,同时在这里也给本人做个备忘)

内联:

葡萄娱乐场 5

左联:

葡萄娱乐场 6

交叉联:

葡萄娱乐场 7

事实上关于联接查询,要是EF建好了主外键小编只怕认为点标识用起来更加爽爽的。

 

结束:

本文并不是要转移您的习贯,也不是还是不是认你的看法。仅仅只是表明个人对点标识和查询表明式的有一些掌握。

至于是采纳查询表达式照旧点标识,恐怕起着越来越大决定性的法力的是团组织一同的习于旧贯和规范。

接下来还想说说,只要大家比较方何,很恐怕就会有人跳出了,什么绝不如,用好了都同一,什么什么才是最根本的,什么什么样的。。。

仿佛许多少人会争持java和C#的争论统一,其实我个人认为相比较下底层实现、比较下语法简易也不是无法的,只要我们得以从中学到知识(个人也是不爱好相比较哪个人什么人何人学怎么样薪资多少多少)。

前几天的友爱相比较明天的投机,前几天的投机比较前几日的要好。只要能够升高为何不用相比较呢?

 

本文以联合至《C#基础知识加强种类