MvvmCross 在 SQLite 插件中使用多个字段的 linq 查询 'orderby' 不起作用

linq query 'orderby' using multiple fields at SQLite plugin by MvvmCross doesn't work

查询如下:

var query = from c in _db.Table<Contact>()
            where c.FirstName.Contains("Alex")
            orderby c.Priority, c.FirstName, c.LastName
            select c;

是不是SQLite、MvvmCross插件的限制? 结果我应该使用 .Syntax 吗?

Error CS1936: An implementation of `ThenBy' query expression pattern for source type `Cirrious.MvvmCross.Community.Plugins.Sqlite.ITableQuery<Contact>' could not be found (CS1936)

您应该能够为您的联系人对象使用自定义 IComparer<T> 来解决此限制。这是一个 MSDN article 解释如何做到这一点。我建议使用 IComparer<T> 而不是 IComparer。我觉得写文章的时候IComparer<T>不存在

我能够通过指定多个 Order By 方法来处理这个问题:

var res = _db.Table<Contact>()
 .Where(c=> c.....)
 .OrderBy(c => c.Priority)
 .OrderBy(c => c.FirstName)
 .OrderBy(c => c.LastName)
 .Select(c=> c)
 .ToList();

转换为 SQLite 查询:

SELECT * FROM "Contact"
WHERE ...
ORDER BY "Priority", "FirstName", "LastName"

希望对您有所帮助