entity-framework - ORM Linq:查询还是方法?哪种方法对性能更好?
问题描述
前段时间我在进行技术面试,工程师问我从性能方面来说哪种方法更好,例如在实体框架中。显然我不知道正确的答案(我说没有区别),我也没有在互联网上找到解决方案。
tldr:哪种方法更快?数据 1 还是数据 2?
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();
}
解决方案
查询语法只是一种语法糖,在编译时总是降低为方法语法。
下面给出一个示例代码:
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();
如您所见,两个查询的查询结构完全相同。
完整的例子在这里。
推荐阅读
- python-3.x - Django 邮件未在视图中向 def 发送邮件错误
- powershell - 我想维护当前的日期文件
- reactjs - 反应 JS。this.props.children 影响最小化灯塔审计中的主线程工作参数
- php - sql查询中无法识别变量名
- dockerfile - 创建 docker 构建时 Cmake 错误“CUDA 编译器标识未知”
- html - Xamarin Web 容器 - 页面重新加载导致白屏
- ios - WKWebView 不使用 URLCache
- c++ - 将数字附加到枚举以获取其他枚举
- javascript - 如何使用 Vanilla JS 通过检查和 clearInterval() 来触发 setInterval() 取消选中复选框?
- java - 使用 XWPFDocument 打开 docx 文件时出现 NullPointerException