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"
希望对您有所帮助
查询如下:
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"
希望对您有所帮助