簡體   English   中英

LINQ OrderBy()。ThenBy()無法正常工作

[英]LINQ OrderBy().ThenBy() not working

我正在將我的項目從使用基於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;

給我錯誤Cannot resolve symbol 'ThenBy' ,但是如果我將順序更改為:

orderby a.AccountName

然后查詢工作正常。 我也嘗試過使用.OrderBy(a => a.AccountName).ThenBy(a => a.AccountNickname)但是我遇到了同樣的錯誤。 我已經包括using System.Linq; 但是ReSharper告訴我,using指令不是必需的,所以這似乎也很麻煩。 有誰知道我可能會缺少什么?

從源頭上看,作者似乎不太了解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;

通常,這樣進行兩次orderby調用是一個非常非常糟糕的主意 -但在這種情況下,這似乎是LINQ提供程序想要的。

    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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM