ORM Linq:查询还是方法?哪种方法对性能更好?

时间:2018-08-06 14:15:11

标签: entity-framework linq entity-framework-core

前段时间,我接受了技术面试,工程师问我从性能方面来看哪种方法更好,例如在Entity Framework中。显然我不知道正确的答案(我说没有区别),而且我也没有在互联网上找到解决方案。

tldr:哪种方法更快?是Data1还是Data2?

using(MyContext db = new MyContext())
{
    var data1 = db.Users.Where(x => x.Name == "Test").FirstOrDefault();
    var data2 = (from x in db.Users where x.Name == "Test" select x).FirstOrDefault();
}

感谢进阶:)

1 个答案:

答案 0 :(得分:1)

查询语法只是一个语法糖,它总是在编译时降为方法语法。

在下面提供示例代码:

var list = new List<Entity>();

var data1 = list.Where(x => x.Name == "Test").FirstOrDefault();
var data2 = (from x in list where x.Name == "Test" select x).FirstOrDefault();

您可以查看此代码的降低版本:

List<Entity> source = new List<Entity>();
Entity entity = source.Where(<>c.<>9__0_0 ?? (<>c.<>9__0_0 = <>c.<>9.<M>b__0_0)).FirstOrDefault();
Entity entity2 = source.Where(<>c.<>9__0_1 ?? (<>c.<>9__0_1 = <>c.<>9.<M>b__0_1)).FirstOrDefault();

如您所见,两个查询的查询结构完全相同。

完整示例为here