Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#实体框架选择不可为空字段的where过滤器后的max_C#_Entity Framework_Max_Where_Nullable - Fatal编程技术网

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
Where
Category.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;