FMF*_*MFF 2 c# linq linq-to-entities entity-framework-4
我有以下数据:
PK OrderNumber USERDEFFIELD
1 0001 10
2 0001 25
3 0002 20
4 0002 22
5 0002 NULL
6 0003 ABC123
Run Code Online (Sandbox Code Playgroud)
UserDefField列在数据库中是VARCHAR类型.使用LINQ,我如何获得每个订单的SUM(UserDefField)?UserDefField的NULL和非数字值将被视为零.我想要得到的结果:
OrderNumber TotalQty
0001 35
0002 42
0003 0
Run Code Online (Sandbox Code Playgroud)
如果UserDefField是严格可以为空的数字字段,我知道我会在foreach循环中执行此操作:
TotalQtyForThisOrder = orders.Sum(w => w.UserDefField ?? 0 );
Run Code Online (Sandbox Code Playgroud)
但是对于字符串字段,应该做什么?非常感谢你的帮助.
TotalQtyForThisOrder = orders.Sum( w = > {
int result;
Int32.TryParse(w.UserDefField, out result);
return result;
});
Run Code Online (Sandbox Code Playgroud)
从根本上说,我会说你的架构是关闭的:如果你将文本值视为一个数字,如果它恰好是可解析的那样,那么你真的要反对合理的设计.
我不知道你怎么能写一个LINQ查询来使这个总和出现在数据库中.您可能想要编写一些自定义转换函数,或者可能是自定义视图执行"尝试解析它并返回0否则"操作.
您可以在LINQ to Objects中轻松完成:
x = orders.Select(y => y.UserDefField) // To just bring down the right values
.AsEnumerable()
.Sum(text => {
int result;
// We don't care about the return value... and
// it even handles null input. (In any error condition,
// "result" will be 0 afterwards.)
int.TryParse(text, out result);
return result;
});
Run Code Online (Sandbox Code Playgroud)
...但我真的建议您尽可能重新访问您的架构.