簡體   English   中英

Linq升序排序

[英]Linq order by ascending sort by descending

對不起,標題,但我不知道該怎么寫。 我會嘗試郵寄。

當我嘗試使用linq和orderby從數據庫中獲取值時,發生了一些奇怪的事情。 讓我們看一下4個查詢:

//1
var badAsc = new ConcurrentBag<int>((from x in se.produkts orderby x.numerProduktu select x.numerProduktu));
//2                        
var bagDesc = new ConcurrentBag<int>((from x in se.produkts orderby x.numerProduktu descending select x.numerProduktu));
//3
var listAsc = (from x in se.produkts orderby x.numerProduktu select x.numerProduktu).ToList();
//4
var listdesc = (from x in se.produkts orderby x.numerProduktu descending select x.numerProduktu).ToList();

我們得到了2個ConcurrentBags<int>和2個List<int> 我從中期望的是1和3將相同,並且2和4將相同。 檢查我得到了什么值:

linq查詢

實際上, ConcurrentBag<int>升序排序。 在Microsoft網站上我們可以看到,排序無關緊要時ConcurrentBag很好,但是正如我們在bagDesc看到的bagDesc ,排序得以保留。 為了說明這一點,我在數據庫中沒有任何奇怪的東西,我還創建了兩個List<int> ,其中應按原樣保留排序。

select * from produkt數據庫中的產品執行select * from produkt得到類似於listAscbagDesc值。

數據庫是mssql 2014numerProduktu是此表中的主鍵。

有人知道那里發生了什么嗎?

這里

ConcurrentBag似乎實現為堆棧而不是隊列。 即,最后添加的項目是第一個刪除的項目。 不過,我不會指望這一點。

因此,它們的添加順序相反。 但是,順序並不意味着在ConcurrentBag可靠地保持一致,因此不能保證總是以這種方式運行,尤其是當被多個線程訪問時。

如果您關心維護原始的輸入順序,那么您可能需要ConcurrentQueue

暫無
暫無

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

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