我希望您在更改以下数据类型后可以帮助我编写代码我得到此异常“Sequence包含无匹配元素异常。”。我确信这是因为FirstOrDefault()扩展。
label.Print(printerName);
这是我的代码:
LandId - long
ShowMapPoint - string
Development - string
Location - string
MapPointX - string
MapPointY - string
AreaSize - from decimal? into long?
Premium - from decimal? into long?
TransactionPrice - from decimal? into long?
答案 0 :(得分:0)
您的问题是Premium
和TransactionPrice
如果您分组并不包含具有值的项目,那么它将尝试对空值求和。那无能为力。
我会改变如下:
(g.All(p => p.TransactionPrice == null) ? null : g.Where(p => p.TransactionPrice != null).Sum(p => p.TransactionPrice))
和
(g.All(p => p.ActualSize == null) ? null : g.Where(p => p.ActualSize != null).Sum(p => p.ActualSize)))
首先检查一切是否为空,然后为空,否则对值进行求和。
但是您需要进一步编辑代码,您当前的代码会启用123 / null
或null / 123
等情况。这也是一个例外。
答案 1 :(得分:0)
很难理解你在做什么。对于所有这些内联来说,它太复杂了。在第13行你有:
z.TransactionPrice > 0 || z.TransactionPrice != null.
你也可以删除z.TransactionPrice> 0,因为第二部分允许所有值(非空),包括小于0的所有值。
'序列不包含匹配元素'异常通常是我在使用.First()时所期望的。不是.FirstOrDefault()。
根据您的代码以及我想要实现的目标,我已经重写了查询:
var result = _context.DwPropertyMasters.Where(x => x.ShowMapPoint == "Y")
.Select(x => new
{
x.LandId,
a = x.Development == null || x.Development == "" ? x.Location : x.Development,
x.MapPointX,
x.MapPointY,
AreaSize = x.AreaSize ?? 0,
Premium = x.Premium ?? 0,
b = (x.AreaSize == 0) ? 0 : (x.Premium * 100000000 / x.AreaSize ?? 0),
c = _context.DwPropertyDetails.Where(z => z.TransactionPrice > 0 && z.LandId == x.LandId)
.GroupBy(z => z.LandId)
.Select(g => g.Sum(p => p.ActualSize) == 0 ? 0 : (g.Sum(p => p.TransactionPrice) / g.Sum(p => p.ActualSize) ?? 0)
.FirstOrDefault(),
d = (x.AreaSize2 == 0) ? 0 : (x.Premium * 100000000 / x.AreaSize2 ?? 0),
x.LandType,
e = _context.DwPropertyDetails.Count(y => y.TransactionPrice > 0 && y.LandId == x.LandId)
});
我不知道这是否按照您的意图行事(并且因为我没有对此进行测试,因此可以正常工作),但它更短,我希望更具可读性。
请记住,此查询是在sql server中执行的,因此无需检查空值。唯一必须防止的是除以零。如果我们考虑下一行:
b = (x.AreaSize == 0) ? 0 : (x.Premium * 100000000 / x.AreaSize ?? 0)
如果:
x.AreaSize为null然后(x.Premium * 100000000 / null ?? 0)=>空值 ?? 0 => 0
x.AreaSize = 0然后结果= 0.
x.Premium为null然后结果为null / value ?? 0 =>空值 ?? 0 => 0
x.Premium = 0然后结果= 0.