2012-03-06 46 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