我有以下声明,当我运行它时,我得到了
枚举没有产生结果
var striko4goodproduct = from myrow in GoodProduct.AsEnumerable()
where myrow.Field<string>("MachineID") == "Striko 4"
group myrow by myrow.Field<string>("MachineID") == "Striko 4" into g
select new
{
TotalGood = g.Sum(x => x.Field<int?>("VIngot") ??
0 + x.Field<int?>("Heads") ??
0 + x.Field<int?>("Risers") ?? 0)
};
是否可以让它返回0
而不是此消息?
有时数据库中会有值,有时则可能没有。
我试图在运行后执行以下操作并为其分配值。
if (striko4goodproduct.Equals(null))
{
}
答案 0 :(得分:3)
Enumeration yielded no results
是一个调试器消息,它不是你在运行时会看到的,所以我不会真正关心它。
只检查查询是否返回了任何结果
if (striko4goodproduct.Any())
{
...
}
答案 1 :(得分:2)
您可以使用DefaultIfEmpty
如果序列为空,则返回指定序列的元素或单例集合中的指定值。
所以你正在寻找类似的东西(注意我删除了匿名类型):
var striko4goodproduct = (from myrow in GoodProduct.AsEnumerable()
...).DefaultIfEmpty(0);
这样,如果内部查询没有返回结果,DefaultIfEmpty
确保至少有一个元素(0
)。
请注意,if (striko4goodproduct.Equals(null))
无效。 linq查询永远不会返回null
;它至少会返回一个空集合。
答案 2 :(得分:2)
我认为你正在寻找这个:
int striko4goodProductCount = GoodProduct.AsEnumerable()
.Where(r => r.Field<string>("MachineID") == "Striko 4")
.Sum(r => (r.Field<int?>("VIngot") ?? 0) +
(r.Field<int?>("Heads") ?? 0) +
(r.Field<int?>("Risers") ?? 0));
+
has precedence over ??
,因此您的代码并不意味着它的意思。我添加了括号来解决这个问题。 striko4goodProductCount
应为int
类型,如果没有值,则为0 - 这是Sum
的默认值:
如果source不包含任何元素,则此方法返回零。