我正在将我的项目从使用基于SQL Server的Entity Framework模型转换为使用本地SQLite数据库。到目前为止一切进展顺利,但由于某种原因,我无法对多列进行排序。例如:
using (var db = new SQLiteConnection("test3.db"))
{
var query = from a in db.Table<Account>()
where a.Inactive == false
orderby a.AccountName, a.AccountNickname
select a;
foreach (var account in query)
{
accounts.Add(account);
}
}
AccountsGrid.ItemsSource = accounts;
给我错误Cannot resolve symbol 'ThenBy'
,但如果我将订单更改为:
orderby a.AccountName
然后查询工作正常。我也试过使用.OrderBy(a => a.AccountName).ThenBy(a => a.AccountNickname)
,但我得到了同样的错误。我已经包含using System.Linq;
但是ReSharper告诉我不需要using指令,所以这看起来也很可疑。有没有人有任何想法,我可能会失踪?
答案 0 :(得分:7)
查看the source,似乎作者没有正确理解LINQ:
ThenBy
方法,而是通过多次OrderBy
来电收集多个订单IQueryable<T>
实现(这就是您不需要using System.Linq
的原因) - 虽然这是一个有效的方法,但它是一个很不寻常的一个我个人对使用它非常紧张 - 事实上它是“有组织的”,因为三个巨大的源文件也略微令人担忧。您可能想尝试使用LinqConnect - 尽管我还没有使用过它。
如果您做想要坚持使用您正在使用的实现,我怀疑这可行 - 但它不适用于其他LINQ提供商:< / p>
var query = from a in db.Table<Account>()
where a.Inactive == false
orderby a.AccountName
orderby a.AccountNickname // Warning! Not portable!
select a;
通常有两个orderby
这样的调用会是真的,非常糟糕的主意 - 但看起来这就是LINQ提供商在这种情况下想要的。
答案 1 :(得分:1)
In Linq Query
var query = (from a in db.Table<Account>()
where a.Inactive == false
orderby a.AccountName ascending, a.AccountNickname descending
select m);
In Lambda Expression
var query = db.Table<Account>().where(a => a.Inactive == false).OrderBy(a => a.AccountName).ThenByDescending(a =>a.AccountNickname);