2016-06-17 122 views
0

我有一个奇怪的问题,试图根据它是否包含特定的字符串值来排序列表。在视图中,我在我的视图模型上有一个列表,我希望显示那些首先不被“延后”的对象,然后根据它们的标题是否包含单词“order”来排序。所以我的代码如下:Linq Orderby'string contains'not behaving as expected In

var sortedFaults = accountFaultContainer.Faults.Values.OrderBy(f => f.IsSnoozed).ThenByDescending(f => f.Title.ToLower().Contains("order")); 

我再通过这个列表循环和使用foreach循环的“断裂”添加到我的表...

foreach (Fault fault in sortedFaults) 

这个工作在某些情况下,但不在其他地方。我一直在试图挑选那些行为不如预期但没有明显区别的人。例如,在一次的情况下,在“失败的命令同步”之前和之后都订购了“完全失败同步”的标题。但情况并非如此,这总是不公平的;在一些表格中,排序正在起作用。

有没有人遇到过类似的问题?或者有什么明显的我失踪了?我在这里挠我的头!

回答

0

您先按顺序排序,以便优先。

.OrderBy(f => f.IsSnoozed) 
.ThenByDescending(f => f.Title.ToLower().Contains("order")); 

试试看的其他方式:

.OrderBy(f => f.Title.ToLower().Contains("order")) 
.ThenByDescending(f => f.IsSnoozed); 
+0

感谢@buffjape但我需要的排序依据延后采取优先。即使是没有“延后”项目的列表,我也遇到了这个问题。我期望使用这段代码,我的列表将显示所有未被延后的项目,其中包含顶部包含“order”的项目,然后是所有被延后的项目,其中包含标题中包含“order”的项目 – Misemefein