问题描述
我将 Xamarin c# linq 与 sqlite-net pcl (https://github.com/praeclarum/sqlite-net) 一起使用。我发现我所有的 linq groupby 都无法正确转换为 sql。 Linq 翻译 Where 子句,但不翻译 Group By。
在以下示例中,Transaction 中使用的字段:
AccountId: int
Amount: double
ICategoryId: int
所有这些查询格式都会导致没有 Group By 的 sql:
select * from "Transaction" where ("DateWithoutTime" <= ?)
var accountBalances1 = _dataService.Connection.Table<Transaction>()
.Where(r => r.DateWithoutTime <= displayDuration.DurationEnd)
.GroupBy(r => r.AccountId)
.Select(g => new
{
Id = g.Key,Balance = g.Sum(b => b.Amount)
})
.ToList();
var accountBalances2 = _dataService.Connection.Table<Transaction>()
.Where(r => r.DateWithoutTime <= displayDuration.DurationEnd)
.GroupBy(r => r.AccountId,(key,g) => new
{
Id = key,Balance = g.Sum(b => b.Amount),})
.ToList();
var accountBalances3 = (from t in _dataService.Connection.Table<Transaction>()
where t.DateWithoutTime <= displayDuration.DurationEnd
group t by t.AccountId
into g
select new { g.Key,Balance = g.Sum(g => g.Amount) })
.ToList();
为了澄清它与双数据类型无关,我尝试了另一个仅使用 int 数据类型的组:
var maxIECategoryId = _dataService.Connection.Table<Transaction>()
.Where(r => r.DateWithoutTime <= displayDuration.DurationEnd)
.GroupBy(r => r.AccountId,IECategoryId = g.Max(b => b.IECategoryId)
})
.ToList();
所有 group by 都在本地处理。有什么技巧可以编写可以在服务器服务上处理的 linq 组吗?或者这是sqlite orm的这种实现的限制?
谢谢,
尼克
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)