实体框架的查询语言
问题描述:
所以我正在学习.NET核心与EF,并通过了几个教程。到目前为止我没有看到的是使用什么查询语言的一个很好的步骤。我已经看到了两种方式来使用至今:实体框架的查询语言
- 功能为导向的方法:
的例子是:
_context.Exams.ToListAsync()
_context.Problems.SingleOrDefaultAsync(p => p.ExamID == exam.ID
students.Where(s => s.LastName.Contains(searchString) || s.FirstMidName.Contains(searchString));
,有时这些串在一起:
_context.Students
.AsNoTracking()
.SingleOrDefaultAsync(m => m.ID == id);
- SQL-looking appr oach:
我认为只需要一个例子:from problem in _context.Problems where problem.ExamID == examID select problem;
所以我的问题是,什么是这两个分别叫什么?什么时候应该选择一个(我相信我看到一个教程同时使用)。并且是LINQ查询的这些例子之一吗?
答
from s in _context.Students where s.ID == 1 select s;
我相信这个被称为查询语法类型的LINQ表达式。
而这一次
_context.Students.SingleOrDefault(m => m.ID == 1);
有些人把这种格式基于方法LINQ查询表达式。这是一个更明确的(对于一些人)
这些只是名称,它是个人喜好,选择他们想要使用哪一个人。重要的是要理解,两种格式都会产生相同的结果。
此外,我认为当代码执行时,C#编译器会将第一个窗体转换为其等效的基于方法的表达式,作为内部lowering process的一部分。