[英]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將相同。 檢查我得到了什么值:
實際上, ConcurrentBag<int>
升序排序。 在Microsoft網站上我們可以看到,排序無關緊要時ConcurrentBag
很好,但是正如我們在bagDesc
看到的bagDesc
,排序得以保留。 為了說明這一點,我在數據庫中沒有任何奇怪的東西,我還創建了兩個List<int>
,其中應按原樣保留排序。
select * from produkt
數據庫中的產品執行select * from produkt
得到類似於listAsc
和bagDesc
值。
數據庫是mssql 2014
, numerProduktu
是此表中的主鍵。
有人知道那里發生了什么嗎?
看這里 。
ConcurrentBag似乎實現為堆棧而不是隊列。 即,最后添加的項目是第一個刪除的項目。 不過,我不會指望這一點。
因此,它們的添加順序相反。 但是,順序並不意味着在ConcurrentBag
可靠地保持一致,因此不能保證總是以這種方式運行,尤其是當被多個線程訪問時。
如果您關心維護原始的輸入順序,那么您可能需要ConcurrentQueue
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.