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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...