1
當我彙總來自空子集合的值時,使用MySQL和EF6會引發異常,因爲DefaultIfEmpty與bug #80127中的相關信息不兼容。子集合中的總和
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 clausule'Project1'。'Id'。這是MySQL的一箇舊bug。
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?