2013-07-12 71 views
3

我正在研究c#中的问题。我有一个对象数组和一个关键对象。有对象的五个属性:从大多数匹配对象到最少匹配对象排列对象

  1. 集团
  2. 国家
  3. 服务
  4. 产业
  5. 技术

我想安排的对象,从而与主要对象最匹配的对象将首先显示。 我想按以下顺序排列数据 -

  1. 它将获得与关键对象组相同组的对象。
  2. 如果找到同一组的对象,那么这些对象将根据国家进行排序。即如果找到相同的参数值,则根据下一个参数决定顺序。
  3. 对于具有不同组的对象,也将遵循相同的过程。

我有一个解决方案: 我创建的5个参数每个排列和组合32个LINQ查询,然后我通过一个合并的那些32分的结果之一。这个解决方案给了我想要的结果,但是这个解决方案需要很多处理。请提供更短的解决方案。

在此先感谢。

+2

你能否提供任何样本数据和期望的输出?这将有助于我们更好地理解事物。 – Sandy

+0

因此,你的LINQ查询就像'myObjects.OrderBy(o => o.Group).ThenBy(o => o.Country).ThenBy(o => o.Service).ThenBy(...)'?但是你也想改变顺序,所以你在代码中做了这个LINQ查询的各种排列,所以定义了另一个,但它看起来像:'myObjects.OrderBy(o => o.Group).ThenBy(o => o.Service )。然后通过(o => o.Technology)。然后通过(...)'?您希望能够以任意顺序定义哪种顺序,而不必重复类似查询32次以上? –

回答

4

只需使用OrderByDescending + ThenByDescending

var orderedObjects = objects 
    .OrderByDescending(o => o.Group == keyObj.Group) 
    .ThenByDescending(o => o.Country == keyObj.Country) 
    .ThenByDescending(o => o.Service == keyObj.Service) 
    .ThenByDescending(o => o.Industry == keyObj.Industry) 
    .ThenByDescending(o => o.Technology == keyObj.Technology) 
    .ThenBy(o => o.Group) // now start ordering by the properties itself 
    .ThenBy(o => o.Country) 
    .ThenBy(o => o.Service) 
    .ThenBy(o => o.Industry) 
    .ThenBy(o => o.Technology) 
    .ToArray(); 

比较返回truefalsetruefalse “较大”,因此Descending因为我们首先要匹配的属性。

+0

谢谢蒂姆。该解决方案解决了我的问题 – AkshayP

1

如何给每个不同重量的比赛指定点数?

A组的比赛可能是100分,一个国家1000,服务10000 ...

然后通过他们的分数排序。