【发布时间】:2017-01-16 13:56:36
【问题描述】:
当我对空子集合中的值求和时,将 MySQL 与 EF6 结合使用会引发异常,因为 MySQL 不支持 bug #80127 中相关的 DefaultIfEmpty。
public class Foo
{
public int Id { get; set; }
public decimal Total { get; set; }
public virtual IList<Bar> Bars { get; set; }
}
public class Bar
{
public int Id { get; set; }
public int FooId { get; set; }
public virtual Foo Foo { get; set; }
public decimal Received { get; set; }
}
将推荐的方法与 DefaultIfEmpty 结合使用会引发异常,其中无效的 where 子句 'Project1'.'Id'。这是 MySQL 的一个老错误。
var result = db.Foo.Select(f => new {
Total = f.Total,
Received = f.Bars.Select(b => b.Received).DefaultIfEmpty().Sum()
});
如果可以正常工作,我正在使用内联,但会生成一个非常丑陋的 SQL,其中包含大量内部查询和重复的选择语句。
var result = db.Foo.Select(f => new {
Total = f.Total,
Received = f.Bars.Any() ? f.Bars.Sum(b => b.Received) : 0
});
有没有更好的方法来避免 DefaultIfEmpty?
【问题讨论】: