Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架和linq之间的混淆 我想知道下面的代码被认为是实体框架或LINQ或其他东西。 var model = _db.Restaurants .OrderByDescending(r => r.Address.City) .Where(r => r.Address.State == state || (state == null));_C#_Linq_Entity Framework - Fatal编程技术网

C# 实体框架和linq之间的混淆 我想知道下面的代码被认为是实体框架或LINQ或其他东西。 var model = _db.Restaurants .OrderByDescending(r => r.Address.City) .Where(r => r.Address.State == state || (state == null));

C# 实体框架和linq之间的混淆 我想知道下面的代码被认为是实体框架或LINQ或其他东西。 var model = _db.Restaurants .OrderByDescending(r => r.Address.City) .Where(r => r.Address.State == state || (state == null));,c#,linq,entity-framework,C#,Linq,Entity Framework,我认为它是linq,因为它使用System.linq名称空间。然而,就我而言,linq是这样写的: var waCustomers = from c in customers where c.Region == "WA" select c; 如果有人能澄清我的疑惑,我将不胜感激。LINQ有两个语法-查询语法,它看起来像声明性查询,并使用集成到语言关键字中的: var query = from x in something

我认为它是linq,因为它使用System.linq名称空间。然而,就我而言,linq是这样写的:

var waCustomers = 
        from c in customers 
        where c.Region == "WA" 
        select c; 
如果有人能澄清我的疑惑,我将不胜感激。

LINQ有两个语法-查询语法,它看起来像声明性查询,并使用集成到语言关键字中的:

var query = from x in something
            where x.Foo == 42
            select x.Bar;
命令式方法语法,它基于您提供的常用方法。方法语法中的相同查询如下所示:

var query = something.Where(x => x.Foo == 42).Select(x => x.Bar);
您应该知道的是,这两个查询之间没有区别。事实上,在编译过程中,任何以查询语法编写的查询都会转换为方法语法。因此,您可以将查询语法看作语法糖

我个人更喜欢可读性和清晰的声明性查询,但它们在方法语法查询中可用的功能子集有限

建议如下:

PS实体框架使用转换为SQL查询的查询。与任何其他LINQ查询一样,您可以用任何语法编写它们。

是一种ORM(对象到关系映射器),它允许您将存储在关系数据库中的记录映射到对象,然后再映射回对象

是一种语言集成查询,它允许为CLR对象集合编写类似SQL的查询,并可以轻松地对其进行操作


但是,这两种方法非常紧密地结合在一起,很难看到一条线将两者分开。

您可以用两种方法编写语言集成查询

1. Query Syntax

   var result = from customer in Customer
                where customer.FirstName == "Mukund"
                select customer;
2. Method Syntax
   var result = Customer.Where( c => c.FirstName == "Mukund");
上述两个查询将给出相同的记录

根据MSDN


介绍性语言集成查询(LINQ)文档中的大多数查询都是使用LINQ声明性查询语法编写的。但是,在编译代码时,必须将查询语法转换为.NET公共语言运行库(CLR)的方法调用。这些方法调用调用标准查询运算符,这些运算符的名称包括WhereSelectGroupByJoinMaxAverage。您可以使用方法语法而不是查询语法直接调用它们。

LINQ是System.LINQ命名空间中的方法集合。它分为两部分,即
可枚举
类和
可查询

Enumerable
half是一组用于处理内存中对象序列的方法

Queryable
half是一个框架。它提供了一组方法,使对象的创建能够表示所使用的各种查询方法。可以对实现
IQueryable
的任何类型调用这些方法,并将表示查询的对象传递给该对象。LINQ本身实际上并没有提供各种实现(除了允许
IQueryable
方法在内存序列上使用的实现之外),它只提供了一个用于定义查询的标准化方法框架

接下来是一大堆不同的“查询提供者”。这就是实体框架。它是
IQueryable
的一个实现,能够接受来自LINQ方法的查询信息,并实际使用该信息做一些事情;在本例中,对数据库执行查询。它与LINQ是分开的,而不是它的一部分,但是LINQ使用它来实际实现执行查询的实际目标。除了EF之外,还有许多其他类型的查询提供者,它们能够使用LINQ提供的标准化查询信息完成各种不同的工作


至于不同的语法,这是一个独立的语言特性,它也独立于LINQ(尽管与LINQ相关)。这是一个叫做“查询语法”的C#特性。它是一种将您提供的代码转换为一系列方法调用的语言功能。
where
关键字映射到
where
方法调用,
Select
关键字映射到
Select
方法调用,等等。您可以查看语言规范,了解任何给定查询语法查询映射到的详细说明。该语法创建的所有各种方法碰巧也由LINQ实现,这使得该语言功能与LINQ非常密切相关,通常仅与LINQ结合使用,尽管从技术上讲它不是LINQ的一部分。

它的LINQ to Entities查询语法在编译时被转换为方法语法,是吗?@pwas,没错,我只是在写:)我从中读到的,EF帮助我们创建数据库和表,然后我们用它来查询使用实体框架创建的数据库,对吗?我从中读到的,EF帮助我们创建数据库和表,然后我们用它来查询使用实体框架创建的数据库,对吗?