2017-10-04 283 views
4

我是实体框架的新手。我有点困惑与EF查询和LINQ查询的区别。我有两个表格和下面列出的相关查询。你能告诉我所有这些查询是否都是LINQ,或者它们中的任何一个都在EF中?我需要编写EF查询来选择整行,少数列和连接。您的帮助或任何相关的链接将不胜感激。区分EF查询和LINQ查询

Product_Details表 PRODUCT_ID,PRODUCT_NAME,价钱,ITEM_DESC,Stock_Avaialble,CREATED_DATE

Sales_Details表 Sales_ID,PRODUCT_ID,Qunatity,Total_Amont

var result = context.ProductDetails 
       where ProductID == 10 
       select new {ProductID, ProductName, Price} 

var result = from prod in context.ProductDetails 
        where ProductID == 10 
        select new {ProductID, ProductName, Price} 

var result = context.ProductDetails 
        .Where(p=>p.ProductID == 10) 
        .Select(p=> new Prod(p.ProductID, p.ProductName, p.Price)) 

var result1 = from prod in context.ProductDetails 
        join sales in context.SalesDetails on prod.ProductID == sales.ProductID 
        select new {prod.ProductID, prod.ProductName, sales.Qunatity, sales.TotalAmount} 

感谢 彼得

+2

EF不是一种语言。 EF是一种支持* LINQ的技术。 –

回答

1

大肠杆菌查询没有这样的事情。在使用E.F.时使用的查询是LINQ。然而,LINQ做了更多。

E.F. documentation来自:

实体框架是一个对象关系映射器(O/RM),使.NET开发使用.NET对象的数据库的工作。它消除了开发人员通常需要编写的大部分数据访问代码的需求。

实体框架是一个在C#中使用的库。

this一篇关于LINQ MSDN上:

我们使用术语语言集成查询(LINQ),以表明查询是开发商的主要编程语言的集成功能。

LINQ is part of C#。

添加到.NET Framework中的通用查询工具适用于所有信息源,而不仅仅是关系数据或XML数据。这个工具被称为.NET语言集成查询(LINQ)。

这里的关键是那句“适用于信息所有来源”。所有的E.F.所做的都是抽象出数据库,并允许你使用它们,就好像它们是程序中的普通枚举数一样。

标准查询运算符允许将查询应用于任何基于IEnumerable的信息源。

对LINQ提供的可枚举项使用LINQ查询和扩展方法来处理E.F.为您提供的“枚举”(DB抽象)。

1

LINQ是一种在你选择的语言(VB,C#,.NET)中查询。它与EF没有直接关系。 EF是映射到数据库的东西,您使用LINQ作为查询数据库的一种方式。这只是您使用与EF配对获取数据的语法。你也可以在集合等东西上使用LINQ。

+0

https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b是一些示例LINQ语句。 –

0

据我了解你的问题,你所有的代码返回与linq相关的查询。他们定义了要在数据库中完成的操作,但还没有到db去,因为他们没有定义执行命令(find,singleordefault,first,tolist等)。 Linq用于构建和执行查询,例如EF语言的附加功能,也可以这样做,但用途有限。对于数据库,linq构建查询并通过EF(或另一个ORM)访问数据库。

像AsNoTracking(),Include(),ThenInclude()等一些语法是EF语法专有的(意思是你必须指定该库)。使用linq语法意味着你必须参考linq(尽管大多数模板默认包含它)。