我试图在LINQ中进行两个var
的左外部联接,但是在选择所需的列时,在需要Object reference not set to an instance of an object
的地方出现Nullable decimal
错误。
var FLS = (from ee in SumTillFYEnd
join es in SumTillFYStart on ee.Account equals es.Account into temp
from t in temp.DefaultIfEmpty()
select new
{
Account = ee.Account, // As of here it works
BeginDr = (t.DrStartCF == 0) ? (decimal?) null : t.DrStartCF // Here I get error Object reference not set to an instance of an object.
});
有时SumTillFYEnd和某些时候SumTillFYStart变为空。我想加入应该使用默认值,以防任何一个或两个都为空。
答案 0 :(得分:0)
问题是试图将null
强制转换为decimal?
。您永远无法直接将null
强制转换为其他类型,无论是否可以为null。这将始终导致NullReferenceException
。相反,您想要的是default
。换句话说,替换为:
(decimal?)null
使用
default(decimal?)
答案 1 :(得分:0)
我使用默认类解决了这个问题。
我看到的原因是十进制不能为null,因此需要将其设置为self._target(*self._args, **self._kwargs)
TypeError: fn() got multiple values for argument 'a'
Process Process-3:
或0
的默认值
因此,您需要为decimal.MinValue
使用默认类,如
SumTillFYStart
在上下文中使用上面的内容,然后在您的代码段中替换
var defaultSumTillFYStart = new SumTillFYStart { Account = string.Empty, DrStartCF =0};
与此
from t in temp.DefaultIfEmpty()
我在下面写了一个linqPad作品,但用于不同的子集;我认为这会对某人有所帮助:
from t in temp.DefaultIfEmpty(defaultSumTillFYStart)
在这里输出: