下面的代码工作正常,直到发生了什么事情,现在它正在返回此错误信息: 运营商'??'不能应用于'int'和'int'
类型的操作数这是我之前的代码,但是现在导致了这个错误。
var Amount = (from x in db.Users where x.userID == ID select (x.fee)).Sum() ?? 0;
'费用'定义为
public int? fee { get; set; } //and tried this too
public Nullable<int> fee { get; set; }
从我的理解“??”不能在不可为空的类型上调用operator。
不可为空或删除'?'来自'int?'什么都不做
有什么建议吗?谢谢!
塞西
答案 0 :(得分:1)
您根本不需要使用?? 0
。
这将导致:
var Amount = (from x in db.Users where x.userID == ID select (x.fee)).Sum();
示例:
http://rextester.com/UVLX36130
LINQ Sum
函数已经接受了可空类型。它会忽略空值(或者将它们视为默认值0,这相当于)。
此外,它将返回与您所求和的相同的可空类型,在这种情况下为int?
。
我真的不明白你如何使用提供的代码获得错误,因为这些不会导致任何错误:
int?[] test = {1,2,3, null};
var sum = (from x in test select x).Sum(); // no error here
Console.WriteLine(sum);
var sum2 = (from x in test select x).Sum() ?? 0; // neither there is an error here
Console.WriteLine(sum2);
但是,这不会编译:
int sum3 = (from x in test select x).Sum(); // compilation error
出现此错误:
无法隐式转换类型&#39; int?&#39; to&#39; int&#39;。存在显式转换(您是否错过了演员?)
不与您的错误相同。
您能否提供一些关于您正在使用的C#版本的更多信息?
你能仔细检查一下编译错误确实在这一行吗?
或者更好,给出一个展示问题的可编辑示例?
Sum()上的文档:https://msdn.microsoft.com/en-us/library/bb156065(v=vs.110).aspx