前段时间,我接受了技术面试,工程师问我从性能方面来看哪种方法更好,例如在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();
}
感谢进阶:)
答案 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。