2012-03-06 63 views
0

我想訂購我的列表卡,但推零到最後。我在這裏閱讀了一些關於這方面的迴應並嘗試瞭解決方案,但似乎並不奏效。訂購與linq和整數零結尾

請在下面看到我的LINQ查詢。 (ToPackCards只是一個擴展映射到我的自定義對象)

List<PackCard> packCards = db 
    .PackCardEntities 
    .OrderBy(pc => pc.PackNumber) 
    .ThenBy(pc => pc.PickPosition == 0) 
    .ThenBy(pc => pc.PickPosition) 
    .ToList() 
    .ToPackCards(); 

我的數據是這樣的

ID | PackNumber | PickPosition | CardId中

1|1|null|100 
2|1|null|120 
3|1|1|134 
4|1|2|232 
5|1|null|456 

我想這是排序像這

3|1|1|134 
4|1|2|232 
1|1|null|100 
2|1|null|120 
5|1|null|456 

我得到的是這種

1|1|null|100 
2|1|null|120 
5|1|null|456 
3|1|1|134 
4|1|2|232 

讓我知道如果我搞砸了這個了不起,謝謝!

+0

如果'PickPosition'是可空類型,嘗試'pc.PickPosition!= null' – Matthew 2012-03-06 14:41:37

+0

複製?請參閱自定義比較器上的此線程:http://stackoverflow.com/q/985657/353147 – 2012-03-06 14:41:58

+0

@Chuck鏈接問題中的情況要複雜得多,我知道解決方案不應該需要自定義比較器 – Wil 2012-03-06 15:44:02

回答

1
List<PackCard> packCards = db 
    .PackCardEntities 
    .OrderBy(pc => pc.PackNumber) 
    .ThenBy(pc => pc.PickPosition == null) 
    .ThenBy(pc => pc.PickPosition) 
    .ToList() 
    .ToPackCards(); 
+0

謝謝,這工作完美,是最簡單的選擇 – Wil 2012-03-06 15:39:52

1

試試這個

List<PackCard> packCards = db.PackCardEntities 
    .OrderBy(pc => pc.PackNumber) 
    .ThenBy(pc => pc.PickPosition.HasValue? pc.PickPosition : int.MaxValue) 
    .ToList().ToPackCards(); 
+0

謝謝,這也起作用但我更喜歡DarkGray的回答 – Wil 2012-03-06 15:42:09