区分EF查询和LINQ查询。

4
我是一个新手,刚开始学习Entity Framework。我对EF查询和LINQ查询的区别有些困惑。我有两个表格和它们相关的查询如下所示。请问这些查询是否全部属于LINQ,还是其中有些属于EF?我需要编写EF查询来选择整行、几列以及连接查询。如果您能提供任何帮助或相关链接,将不胜感激。
产品详情表 产品ID、产品名称、价格、货品描述、库存量、创建日期
销售详情表 销售ID、产品ID、数量、总金额
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}

感谢Peter。


2
EF不是一种语言。EF是一种支持LINQ的技术。 - Gert Arnold
3个回答

1
LINQ是一种在您选择的语言中进行查询的方式(VB、C#、.NET)。它与EF没有直接关系。EF是将映射到您的数据库的内容,您可以使用LINQ作为查询数据库的方式。这只是您使用与EF配对的语法获取数据的方式。您还可以在诸如集合之类的东西上使用LINQ。

这里有一些LINQ语句示例:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b。 - Dylan Wright

1

不存在 E.F. 查询。在使用 E.F. 时,您使用的查询是 LINQ。不过,LINQ 做了更多的事情。

来自 E.F. 文档

Entity Framework 是一个对象关系映射器(O/RM),它使 .NET 开发人员能够使用 .NET 对象来处理数据库。它消除了开发人员通常需要编写的大部分数据访问代码。

Entity Framework 是 C# 中使用的库。

来自 MSDN 上关于 LINQ 的 这篇 文章:

我们使用术语“语言集成查询”(LINQ)来表示查询是开发人员主要编程语言的集成特性

LINQ 是 C# 的一部分

添加到 .NET Framework 的通用查询功能适用于所有信息来源,而不仅仅是关系或 XML 数据。此功能称为 .NET 语言集成查询(LINQ)。

重点在于短语“适用于所有信息源”。E.F. 所做的只是将数据库抽象出来,使你可以像使用程序中普通的可枚举对象一样处理它们。

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

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


0
据我理解你的问题,你的所有代码都返回与Linq相关的查询。它们定义在数据库中要执行的操作,但是因为它们没有定义执行命令(如find、singleordefault、first、tolist等),所以它们还没有到达数据库。Linq用于构建和执行查询,就像EF语言的补充一样,它也可以执行查询,但使用范围有限。对于数据库,Linq构建查询并通过EF(或其他ORM)访问数据库。

一些语法,如AsNoTracking()、Include()、ThenInclude()等,是EF语法专用的(这意味着你必须引用该库)。使用Linq语法意味着你必须引用Linq(尽管大多数模板默认包含它)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接