为什么 Fluent Hibernate .Sum 在空 table 处使用时会抛出 InvalidOperationException?
Why does fluent Hibernate .Sum throws InvalidOperationException when used at an empty table?
我在 C# 中使用流畅的 Hibernate 来查询 sqlite 数据库。
所以当我的数据库中至少有一个 CashTransaction 时,这段代码工作正常。
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
Debug.WriteLine(transactions.Count().ToString());
return transactions.Sum(s => s.Value);
}
但如果 CashTransaction table 为空,最后一行将抛出 InvalidOperationException。这是为什么?
我可以将代码更改为:
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
if (transactions.Count() > 0)
{
return transactions.Sum(s => s.Value);
}
else
{
return 0;
}
}
但这似乎不太优雅。
好的,这里的代码似乎也适用于空的 CashTransaction table:
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
return transactions.Sum(s => (decimal?)s.Value);
}
这种行为的原因似乎是 SQL 和 linq 的差异,决定优先使用 linq 方式。至少这里是这样解释的 https://social.msdn.microsoft.com/Forums/office/en-US/479f2823-c942-4990-adca-21e03f969a12/sum-on-empty-table-throws-invalidoperationexception
我在 C# 中使用流畅的 Hibernate 来查询 sqlite 数据库。
所以当我的数据库中至少有一个 CashTransaction 时,这段代码工作正常。
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
Debug.WriteLine(transactions.Count().ToString());
return transactions.Sum(s => s.Value);
}
但如果 CashTransaction table 为空,最后一行将抛出 InvalidOperationException。这是为什么?
我可以将代码更改为:
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
if (transactions.Count() > 0)
{
return transactions.Sum(s => s.Value);
}
else
{
return 0;
}
}
但这似乎不太优雅。
好的,这里的代码似乎也适用于空的 CashTransaction table:
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>();
return transactions.Sum(s => (decimal?)s.Value);
}
这种行为的原因似乎是 SQL 和 linq 的差异,决定优先使用 linq 方式。至少这里是这样解释的 https://social.msdn.microsoft.com/Forums/office/en-US/479f2823-c942-4990-adca-21e03f969a12/sum-on-empty-table-throws-invalidoperationexception