我在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表是空的,在最后一行會拋出一個InvalidOperationException。這是為什么呢?
我可以把我的代碼改為:
public decimal? GetSum(ISession dbSession)
{
var transactions = dbSession.Query<CashTransaction>()。
if (actions.Count() > 0)
{
return transactions.Sum(s => s.Value)。
}
else[/span
{
return 0;
}
}
但這似乎不是很優雅。
uj5u.com熱心網友回復:
好的,這里的代碼似乎也適用于空的CashTransaction表:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/327126.html
標籤:
