实体框架6 - 如果查询不包含任何行,则检索null而不是default

时间:2014-06-23 13:07:20

标签: linq entity-framework lambda

实体Foo:

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!

1 个答案:

答案 0 :(得分:1)

不是在查询中进行投影,而是可以在以下情况后撤回完整的实体和项目:

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,因为我不知道这是可能的(只是投射在投影中):

int? barX = FOOs.GetQuery().Where(f => f.x == x).Select(f => (int?)f.bar).SingleOrDefault();