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
Linq 实体框架6-如果查询不包含行,则检索null而不是默认值_Linq_Entity Framework_Lambda - Fatal编程技术网

Linq 实体框架6-如果查询不包含行,则检索null而不是默认值

Linq 实体框架6-如果查询不包含行,则检索null而不是默认值,linq,entity-framework,lambda,Linq,Entity Framework,Lambda,实体Foo: int? barX = FOOs.GetQuery().Where(f => f.x == x).Select(f => f.bar).SingleOrDefault(); public int Foo{get;set;} EF查询: int? barX = FOOs.GetQuery().Where(f => f.x == x).Select(f => f.bar).SingleOrDefault(); 如果没有f.x==x但我想返回null的行,则返

实体Foo:

int? barX = FOOs.GetQuery().Where(f => f.x == x).Select(f => f.bar).SingleOrDefault();
public int Foo{get;set;}

EF查询:

int? barX = FOOs.GetQuery().Where(f => f.x == x).Select(f => f.bar).SingleOrDefault();
如果没有
f.x==x
但我想返回
null
的行,则返回整数的默认值0

如何做到这一点


无论结果是空的还是列值真的是0,0都不是明确的指示器

不必在查询中进行投影,您可以在以下操作之后收回完整的实体和项目:

var foo = FOOs.GetQuery().Where(f => f.x == x).SingleOrDefault();
int? barX = foo != null ? (int?)foo.bar : null;
如果您担心获取整个实体,那么可以返回匿名类型,而不是完整类型:

var foo = FOOs.GetQuery().Where(f => f.x == x).Select(new { bar = f.bar }).SingleOrDefault();
int? barX = foo != null ? (int?)foo.bar : null;
感谢@Flater,因为我不知道这是可能的(只需在投影中投射):


这是一个有效的解决方法,但如果可能的话,我不想从OP的原始代码片段中提取整个实体。是否应
。选择(f=>(int?.f.bar)。SingleOrDefault()
是否不解决此问题?似乎是一种比向代码中添加额外求值更简洁的方法。@如果您想要简单的代码,当然可以。=)我根据你的建议再次编辑了答案,但请随意发布答案,我将删除编辑。谢谢@Flater。我仍然认为这是EF的一个大问题@公平地说,int不能是null。并不是EF不想返回null,而是因为该语言不支持值类型的
null