2013-07-12 70 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 ...

然後通過他們的分數排序。