C#实体框架选择不可为空字段的where过滤器后的max
我有一个不可为空的字段(C#实体框架选择不可为空字段的where过滤器后的max,c#,entity-framework,max,where,nullable,C#,Entity Framework,Max,Where,Nullable,我有一个不可为空的字段(Num) 要查找Category==“A” 当没有category==“A”的任何记录时出现问题。由于Where()的结果为null,因此Max()的结果将为null,但当Num不可为null时,会发生异常 我可以通过在表设计中将Num设置为可为null来修复它,但我不喜欢这种解决方案,因为Num应该有值并且不应该为null 有什么建议吗?当Num不可为null时,是否有一种方法可以接受Num的null值?还有更好的问题吗 int maxShoeSize = Worker
Num
)
要查找Category==“A”
当没有category==“A”
的任何记录时出现问题。由于Where()
的结果为null,因此Max()
的结果将为null,但当Num
不可为null时,会发生异常
我可以通过在表设计中将Num
设置为可为null来修复它,但我不喜欢这种解决方案,因为Num
应该有值并且不应该为null
有什么建议吗?当Num不可为null时,是否有一种方法可以接受Num的null值?还有更好的问题吗
int maxShoeSize = Workers.Where(x => x.CompanyId == 8)
.Select(x => x.ShoeSize)
.DefaultIfEmpty(0)
.Max();
见:
当Num不可为null时,是否有一种方法可以接受Num的null值
当然你可以:
//...
.Max(r => (int?)r.Num);
每个不可为null的值都可以转换为可为null的值(但反之亦然)。我个人更喜欢这种方法(这在异常消息中有明确的建议),因为它允许我区分无最大值和最大值0(零),甚至int.MinValue
您可以尝试:
var maxnum = myTable
.Where(r => r.Category == "A")
.Max(r => r.Num) ?? 0;
然后您可以处理0结果。因此,如果查询的
Where.(r=>r.Category.Equals(“A”)
部分为null,并且Num
不可为null,我希望它会给您一个异常,因为没有Num
WhereCategory.Equals(“A”)的记录
?查看DefaultIfEmpty
查看OK重复问题!虽然我在搜索中找不到该问题,但无论如何,我会在该问题上添加一些标记,这可能有助于以后更好地搜索结果。请继续回答其他问题。我认为DefaultIfEmpty是解决此类问题的更好方法,但正如您建议的,如果我们不这样做会更好ke为空获取0。
//...
.Max(r => (int?)r.Num);
var maxnum = myTable
.Where(r => r.Category == "A")
.Max(r => r.Num) ?? 0;