gpt4 book ai didi

Linq 表达式语法 - 如何使其更具可读性?

转载 作者:行者123 更新时间:2023-12-01 16:54:53 24 4
gpt4 key购买 nike

我正在编写一些东西,它将使用 Linq 通过 Linq2Sql 和内存中的对象列表来组合数据库中的结果,以便找出哪些内存中的对象与数据库中的某些内容相匹配。

我已经用表达式和查询语法提出了查询。

表达式语法

var query = order.Items.Join(productNonCriticalityList,
i => i.ProductID,
p => p.ProductID,
(i, p) => i);

查询语法

var query =
from p in productNonCriticalityList
join i in order.Items
on p.ProductID equals i.ProductID
select i;

我意识到我们拥有表达式语法的所有代码完成优点,而且我实际上更多地使用它。主要是因为更容易创建可重用的过滤器代码块,这些代码块可以链接在一起形成更复杂的过滤器。

但是对于连接来说,后者对我来说似乎更具可读性,但这也许是因为我习惯于编写 T-SQL。

那么,我是否错过了一个技巧,或者只是需要习惯它?

最佳答案

我同意其他回复者的观点,即您所问的确切问题只是一个偏好问题。就我个人而言,我会混合使用这两种形式,具体取决于哪种形式对于我正在编写的特定查询来说更清晰。

如果我有一条评论,我会说查询看起来可能会加载订单中的所有项目。对于单个订单来说,一次可能没问题,但如果您要循环处理大量订单,则一次加载所有订单的所有项目可能会更有效(您可能还想按日期或日期进行过滤)客户,或者其他什么)。如果您这样做,通过切换查询可能会获得更好的结果:

var productIds = (from p in productNonCriticalityList
orderby p.productID
select p.ProductID).Distinct();

var orderItems = from i in dc.OrderItems
where productIds.Contains(i.ProductID)
&& // Additional filtering here.
select i;

乍一看有点倒退,但它可以让您免于加载所有订单项以及发送大量查询。它之所以有效,是因为 where ProductIds.Contains(...) 调用可以转换为 SQL 中的 where i.ProductID in (1, 2, 3, 4, 5) 。当然,你得根据预期的订单数量,以及产品ID的数量来判断。

关于Linq 表达式语法 - 如何使其更具可读性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com