EF6でMySQLを使用すると、DefaultIfEmptyがbug #80127に関連してMySQLでうまくサポートされないため、空の子コレクションの値を合計すると例外がスローされます。 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; }
}
が無効clausule 'Project1の' が例外をスローします。 'ID'。これはMySQLの古いバグです。
var result = db.Foo.Select(f => new {
Total = f.Total,
Received = f.Bars.Select(b => b.Received).DefaultIfEmpty().Sum()
});
それが正常に動作しますが、内側のクエリとSELECT文の繰り返しの多い非常に醜いSQLを生成した場合、私は、インラインを使用しています。
var result = db.Foo.Select(f => new {
Total = f.Total,
Received = f.Bars.Any() ? f.Bars.Sum(b => b.Received) : 0
});
DefaultIfEmptyを避けるより良い方法はありますか?