2011-10-04 59 views
0

我有对象的集合。我需要用困难的条件对它进行排序,使用许多属性和计算。我的解决方案是定义对象特殊的int属性,返回值,即OrderBy肩负。这个解决方案不够好。
对于例如,收集应首先由State属性排序,那么如果State = 1,通过Value1属性,如果State = 2,通过Value2物业等。
建议,请解决一些问题。集合的自定义排序

+0

@Baszz,感谢您的建议,但哪里有可能误解?我提供了一个小例子,我必须处理,并且已经有3个令人满意的答案。 –

+0

好的,我删除它并再次提高。 –

回答

2

您可以通过使用OrderBy第一个严格的标准和使用ThenBy后链接的其他标准命令由多个条件的集合。

你的第一个准则是简单地按照国有财产命令。你的第二个标准取决于国家财产;假设值1,值等有相同的类型,你可以使用一个switch语句来选择合适的值:

IEnumerable<MyClass> result = items 
    .OrderBy(item => item.State) 
    .ThenBy(item => 
    { 
     switch (item.State) 
     { 
      case 1: return item.Value1; 
      case 2: return item.Value2; 
     } 
     throw new Exception(); 
    }); 
0

您可以使用IComparer类;
只需将上面给出的所有逻辑放入其比较方法即可。