2011-10-29 21 views
1

私は型クラスのデータが含まれているリストを持っているC#で、関連する項目のコレクションを並べ替え

Class A 
{ 
int Year 
int CountryID 
string City 
decimal SalesAmount 
} 

私の要件は、ソート年と国とをグループ化してアイテムを表示するグリッドにこのリストをバインドすることですsalesamountのDESC

によって私が年とCountryIDを注文して値を読み取るが、ここでソート

を適用しながら問題に直面することによって、私の半分の要件を達成し、私はグループにそれらを使用するアプローチがあります。コードで

from t in listA 
order by t.Year,t.CountryID 

をグループ化されたとして、私は年とCountryIdに発注し、aspxページで、私はそれらを表示するROWSPAN調整していて値を読んでいるの背後にあるので、私はsalesamountにこのコレクションを並べ替えることが可能な方法があります同じ年と同じ国の条件を考慮したり、私のアプローチが間違っていますか?ポストへのより多くの情報を追加する

 List<A> list = new List<A>() 
{ 
    new A() { Year = 2001, CountryID = 10,State="A", SalesAmount = 322 }, 
    new A() { Year = 2011, CountryID = 1,State="A", SalesAmount = 23 }, 
    new A() { Year = 1983, CountryID = 12,State="A", SalesAmount = 6 }, 
    new A() { Year = 2011, CountryID = 1,State="B", SalesAmount = 211 }, 
    new A() { Year = 2011, CountryID = 1,State="C", SalesAmount = 32 }, 
    new A() { Year = 2001, CountryID = 10,State="B", SalesAmount = 65 }, 
    new A() { Year = 1983, CountryID = 12,State="C", SalesAmount = 22 }, 
    new A() { Year = 2001, CountryID = 10,State="C", SalesAmount = 1 }, 
}; 

今私は、グリッド上で、このデータを表示する必要が Data on Grid

+0

グループ化と並べ替えの詳細については、提供する必要があります。 –

+0

@ AlbinSunnanbo:問題文を編集しました:) –

答えて

2

たぶん私は誤解だが、私はあなたがOrderBy()ThenBy()IEnumerable<T> extension methodsを使用したいと思います。

のような何か:

List<A> list = new List<A>() 
{ 
    new A() { Year = 2001, CountryID = 10, SalesAmount = 322 }, 
    new A() { Year = 2011, CountryID = 1, SalesAmount = 23 }, 
    new A() { Year = 1983, CountryID = 12, SalesAmount = 6 }, 
    new A() { Year = 2011, CountryID = 1, SalesAmount = 211 }, 
    new A() { Year = 2001, CountryID = 1, SalesAmount = 32 }, 
    new A() { Year = 2003, CountryID = 10, SalesAmount = 65 }, 
    new A() { Year = 2050, CountryID = 12, SalesAmount = 22 }, 
    new A() { Year = 1974, CountryID = 10, SalesAmount = 1 }, 
}; 

var sortedList = list 
    .OrderBy(a => a.Year) 
    .ThenBy(a => a.CountryID) 
    .ThenBy(a => a.SalesAmount); 
+0

それは私に期待した実際の結果を与えてくれません:( –

0

EDIT:考慮し、あなたの更新に基づいたよう

、私の元のクエリは、このような何かをいじる必要があるでしょう:

var groupedItems = 
    from i in list 
    orderby i.Year 
    group i by new { i.Year, i.CountryID } into g  
    select new { Key = g.Key, A = g }; 


されていません達成したいことを完全に明確にすることができます。

var groupedItems = 
    from i in list 
    orderby i.Year, i.CountryID 
    group i by i.SalesAmount into g   
    select new { SalesAmount = g.Key, A = g }; 

ので、このようなコレクションのために次のよう

List<A> list = new List<A>() 
{ 
    new A() { Year = 2001, CountryID = 10, SalesAmount = 322 }, 
    new A() { Year = 2011, CountryID = 1, SalesAmount = 23 }, 
    new A() { Year = 1983, CountryID = 12, SalesAmount = 6 }, 
    new A() { Year = 2011, CountryID = 1, SalesAmount = 322 }, 
    new A() { Year = 2001, CountryID = 1, SalesAmount = 322 }, 
    new A() { Year = 2003, CountryID = 10, SalesAmount = 6 }, 
    new A() { Year = 2050, CountryID = 12, SalesAmount = 23 }, 
    new A() { Year = 1974, CountryID = 10, SalesAmount = 23 }, 
}; 

は、我々は結果を表すことができます。

Group1 (23) 
    - A { 1974, 10, 23 } 
    - A { 2011, 1, 23 } 
    - A { 2050, 12, 23 } 

Group2 (6) 
    - A { 1983, 12, 6 } 
    - A { 2003, 10, 6 } 

Group3 (322) 
    - A { 2001, 1, 322 } 
    - A { 2001, 10, 322 } 
    - A { 2011, 1, 322 } 

私はあなたが次のようになりグループを、注文したいかもしれないはず簡単。

+0

hmm ..でも答えは私の問題を解決していませんでした:( –

関連する問題