代码:
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了,所以可能生锈了。
最常见的方法是按偏好排序并选择第一个:
con.Contractors.OrderByDescending(ctr => ctr.Type == "Prime").FirstOrDefault()
如果有更多类型,您必须过滤掉“Prime”和“Original Prime”(在订购前添加
Where
)。
排序是降序的,因为
ctr.Type == "Prime"
为 true 的那个会浮到顶部。