2016-10-14 7 views
0

は、以下の単純なプロパティ異なるプロパティ

Class Data 
{ 
     public string AA { get; set; } 
     public int BB { get; set; } 
     public int CC { get; set; } 
     ... 
    } 

とデータ項目のリストを与えられたリストアイテムから、リスト項目を復元いくつかの例のデータを有する

List<Data> Items = new List<Data>; 

"2002", 3 ,5 .. 
"2002", 3 ,5 .. 
"2006", 4 ,2 .. 
"2002", 3 ,5 .. 
"2018", 9 ,7 .. 
"2018", 5 ,5 .. 

私は文字列AAのdistint値を見つける必要があるので、私は次のコードを使用することができます

foreach(var itm = Items.Select(x => x.AA).Distinct())) 
    { 
     use itm ... 
    } 

これはcoretly itm = string "2002"、 "2006"、 "2018"を返すが、 "Distinctly Selected"項目の残りのプロパティ、すなわちBBなども復元する必要がある。プライマリフィールドに移動します。

私はこれを達成しようとする方法を試しましたが、成功しなかったため、誰かがこれを達成する方法を示すことができれば感謝します。

私はアイテムにインデックスを再現しようとしましたが、リスト内のすべてのアイテムを に返すためには遠いところで動作する基本アイテム、つまりDataを返します。

実際には、数万のデータ項目があり、そのデータ項目にリンクされたフィールドを回復する必要があります。

私は現在、別個のアイテムを抽出し、生成されたリストを使用して最初に一致するアイテムを検索し、次にデータを回復するための実用的なソリューションを持っています。それは動作しますが、私はリストに対して余分な時間を処理しなければならないので、あまり贅沢ではありません。このソリューションにはSQLオプションはありません

注意、供給されたデータは、XMLやJSONソリューションです

コメントは

おかげ

+0

あなたは鍵が 'AA'と値です'すべてのデータのリストが同じ 'AA'を持つオブジェクトですか?'辞書<文字列、リスト>を使用してみましたか – Enfyve

+0

過去の経験から、たくさんの品物を粉砕するように頼んだとき、私は辞書が非常に遅いことを発見しました。私は練習することが5000000項目があるかもしれないが、それは考えられた感謝です。 –

答えて

1

個別に任意の集約なしでちょうどグループ歓迎スタンドアロンのexeファイルである必要があります。あなたが望むのは、AAにグループ化してから値を集計することです。具体的には、最初に一致するものを取りたいと思っています。このようにすることができます。

Items.GroupBy(x => x.AA, x => x, (x,grp) => grp.First()) 
+0

これは、私が長いコードでやっていることにはるかにエレガントな解決策であるように思われます。私はその結果を試してみましょう - ありがとう –

0

別の変数を作成し、それが仕事である必要があり、その変数にして、グループを適用します。

var another_item = Items.GroupBy(x => x.AA).ToList(); 
foreach(var itm in another_item) 
{ 
    use itm ... 
} 
関連する問題