如何解决Sqlite-net linq GroupBy 无法翻译
我将 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();
同理,生成的sql也没有group by。
所有 group by 都在本地处理。有什么技巧可以编写可以在服务器服务上处理的 linq 组吗?或者这是sqlite orm的这种实现的限制?
谢谢,
尼克
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。