实体框架的查询语言

问题描述:

所以我正在学习.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的一部分。