我有这个代码:
var res1 = dtData.AsEnumerable()
.Where(...)
.Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(),
idpolicy = f["IdPolicy"].ToString() })
.FirstOrDefault();
但是,由于这会返回匿名类型,因此其默认值为 null
。
我希望它充当 int
类型的 FirstOrDefault
。
因此,如果没有记录,它将返回 0(默认行为为 int)。
这可能吗?
附: (当然我可以在条件下检查它,但我仍然更喜欢 linq 方式)。
最佳答案
返回一个表示“无”的匿名类型,并使用空合并运算符:
var res1 = dtData.AsEnumerable()
.Where(...)
.Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(),
idpolicy = f["IdPolicy"].ToString() })
.FirstOrDefault() ?? new { val = 0, idpolicy = "" };
或者 DefaultIfEmpty
扩展方法:
var res1 = dtData.AsEnumerable()
.Where(...)
.Select(f => new { val = f["PremiumAfterUWDiscount"].ToDecimalOrZero(),
idpolicy = f["IdPolicy"].ToString() })
.DefaultIfEmpty(new { val = 0, idpolicy = "" })
.FirstOrDefault();
如果您实际上返回一个对象
并稍后进行转换(根据@recursive的答案),您只能返回一个int
来代替匿名类型,但这对我来说似乎适得其反。
FirstOrDefault
没有提供指定“默认”是什么的方法。
关于c# - Linq 的 FirstOrDefault 充当其他类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434789/