C# Entity Framework 在不可为空字段的过滤器之后选择最大值

标签 c# entity-framework max where-clause nullable

我有一个不可为空的字段(Num)

class MyTable
{
    //...
    public int Num { get; set; }
    public string Category { get; set; }
    //...
}

想要找到 Category == "A" 的最大 Num

var maxnum = myTable
   .Where(r => r.Category == "A")
   .Max(r => r.Num);

category == "A" 没有任何记录时,就会出现问题。因为 Where() 的结果为空,所以 Max() 的结果将为空,但是当 Num 不可为空时,会发生异常。

我可以通过在表设计中将 Num 设置为可为空来解决此问题,但我不喜欢这种解决方案,因为 Num 应该具有值(value)且不应为空。

有什么建议吗?有没有一种方法可以在 Num 不可为空时接受 Num 的空值?或任何更好的查询?

最佳答案

int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
                     .Select(x => x.ShoeSize)
                     .DefaultIfEmpty(0)
                     .Max();

参见:Max return value if empty query

关于C# Entity Framework 在不可为空字段的过滤器之后选择最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37217741/

相关文章:

c# - 如何设置IIS网站的默认编码?

c# - 在程序的任务栏图标中显示进度条

c# - 使用提供程序 'RsaProtectedConfigurationProvider' 解密失败

c# - 依赖注入(inject) : ASP vNext. 这是如何工作的?

python - numpy max vs amax vs 最大值

algorithm - 二维最大子数组

MYSQL - 在与其他列的组中显示具有最大计数值的行

c# - 如何在 C# 中使用 iTextSharp 获取 pdf 文件中的特定段落?

entity-framework - Entity Framework 获取 foreach 中多次插入的 ID

c# - 仅在代码中添加关系