Lambda表明式你更欣赏哪个爱博体育app

【转】Linq表明式、拉姆da表明式你更爱好哪个?

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

如图:

爱博体育app 1

同理可得Linq表明式和Lambda表达式并不曾什么样可比性

那与Lambda表明式相关的整条语句称作什么吗?在微软并未交给官方的命名,在《深入驾驭C#》中称为点标记

爱博体育app 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 });

为什么选取点标识 

作者信任越来越多的人偏侧选拔点标识。具体哪些来头作者也说不清(也许是点标识中的拉姆da更Gavin雅吧)。对于作者个人来说,也是更上一层楼喜欢点标志这种办法。

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

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

爱博体育app 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
咦,那句没卵用的废话就无法省吧?是的,省了就报错:

爱博体育app 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();//交集

 

爱博体育app,何以时候利用查询表明式?

由此上边的比较,好像查询表明式一文不值了。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的技士。

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

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

接下去大家写内联、中国左翼散文家联盟、交叉联的查询表明式和对应的点标识代码。(目标:或者有一点点人不会,同期在此处也给自身做个备忘)

内联:

爱博体育app 5

左联:

爱博体育app 6

交叉联:

爱博体育app 7

实际上关于联接查询,假诺EF建好了主外键笔者照旧以为点标识用起来更加爽爽的。

 

结束:

正文实际不是要改成您的习于旧贯,也不是或不是认你的见解。仅仅只是表明个人对点标识和询问表明式的多少精晓。

有关是采纳查询表达式依旧点标志,大概起着更加大决定性的作用的是团伙共同的习贯和正式。

接下来还想说说,只要大家比较方何,很或然就能有人跳出了,什么绝不及,用好了都一样,什么什么才是最注重的,什么什么样的。。。

就像许四人会厌恶java和C#的对待,其实小编个人感觉比较下底层完成、对比下语法简易也不是不可以的,只要大家得以从中学到知识(个人也是不欣赏相比较什么人哪个人哪个人学怎样薪水多少有一些)。

昨天的和睦相比较明日的协和,今天的协和比较之下明天的和煦。只要能够进步为啥不用相比较呢?

 

正文以联合至《C#基础知识加强体系

相关文章