首页 > 解决方案 > 这两个 LINQ 查询有什么区别以及如何正确优化它们?

问题描述

我有一个客户表,其中包含以下列:Id、FirstName、LastName、CurrencyId、Gender。

我想选择与 ID 10 对应的客户货币,所以我正在做这样的事情:

var currencyId = Db.Clients.FirstOrDefault(c=>c.Id == 10)?.CurrencyId;

此行是从 Db 中获取所有属性并在代码中选择货币还是在数据库中执行类似的操作:

SELECT currencyId FROM Client WHERE ID = 10

或者我应该这样写 linq:

var currencyId = Db.Clients.Where(c=>c.Id == 10).Select(c=>c.CurrnecyId).FirstOrDefault();

这两个查询有什么区别?将上述 SQL 查询转换为 linq 查询的正确方法是什么?

标签: c#mysqlsql-serverlinqlinq-to-sql

解决方案


我自己调查了一下,因为我发现大多数人的答案都是有问题的。我希望将FirstOrDefault结果具体化(您还可以从不再使用查询对象的类型中看到),这意味着它会查询所有属性。

与第二个查询不同,您在过滤您喜欢的属性时仍在使用查询,因此取决于实现,它可用于过滤属性和选择特定字段。

以下是使用 EF 为两个类似查询生成的查询示例,其中显示两者都生成不同的查询:https ://dotnetfiddle.net/5aFJAZ


推荐阅读