LINQ OrderBy().ThenBy()不工作

dub*_*lee 1 c# sql linq sqlite

我正在将我的项目从使用基于SQL Server的实体框架模型转换为使用本地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;
Run Code Online (Sandbox Code Playgroud)

给我错误Cannot resolve symbol 'ThenBy',但如果我将订单更改为:

orderby a.AccountName
Run Code Online (Sandbox Code Playgroud)

然后查询工作正常.我也试过使用,.OrderBy(a => a.AccountName).ThenBy(a => a.AccountNickname)但我得到了同样的错误.我已经包括using System.Linq;但是ReSharper告诉我不需要using指令,所以这看起来也很可疑.有没有人有任何想法,我可能会失踪?

Jon*_*eet 7

看看源代码,作者似乎并不理解LINQ:

  • 他们没有提供ThenBy方法,而是他们通过多次OrderBy调用收集多个订单
  • 他们没有将表暴露为IQueryable<T>实现(这就是你不需要的原因using System.Linq) - 虽然这是一种有效的方法,但这是一个非常不寻常的方法.

我个人会非常担心使用它 - 事实上它是"有组织的",因为三个巨大的源文件也略微令人担忧.您可能想尝试使用LinqConnect - 尽管我还没有使用它.

如果你确实想坚持你正在使用的实现,我怀疑这会工作 - 但它不适用于其他LINQ提供程序:

var query = from a in db.Table<Account>()
    where a.Inactive == false
    orderby a.AccountName
    orderby a.AccountNickname // Warning! Not portable!
    select a;
Run Code Online (Sandbox Code Playgroud)

通常有两个这样的orderby调用会是一个非常非常糟糕的想法 - 但似乎这就是LINQ提供商在这种情况下想要的.