EF Core 8 - 更有效的编码方式?像 SQL Case 语句之类的东西?

问题描述 投票:0回答:1

代码:

var primeCtr = con.Contractors?.Where(ctr => ctr.Type == "Prime").FirstOrDefault();
if (primeCtr == null)
   primeCtr = con.Contractors?.Where(ctr => ctr.Type == "Original Prime").FirstOrDefault();

说明: 如果存在“Prime”类型的承包商,请使用该承包商,否则使用“原始 Prime”

我可以使用 ? 进行编码: 表达但我认为效率会较低?

var primeCtr = con.Contractors?.Where(ctr => ctr.Type == "Prime").Any() ? con.Contractors?.Where(ctr => ctr.Type == "Prime").FirstOrDefault() : con.Contractors?.Where(ctr => ctr.Type == "Original Prime").FirstOrDefault();

我认为“Prime”查询会执行两次?

只是想确定是否有更优雅的方式使用 EF Core 8 来表达这一点? 这是我的第一个 EF Core 应用程序,我已经好几年没有使用旧的 EF了,所以可能生锈了。

entity-framework-core linq-to-entities
1个回答
0
投票

最常见的方法是按偏好排序并选择第一个:

con.Contractors.OrderByDescending(ctr => ctr.Type == "Prime").FirstOrDefault()

如果有更多类型,您必须过滤掉“Prime”和“Original Prime”(在订购前添加

Where
)。

排序是降序的,因为

ctr.Type == "Prime"
为 true 的那个会浮到顶部。

© www.soinside.com 2019 - 2024. All rights reserved.