2
public class Vehicle {
    public string Type
    public List<Color> Colors;
}

public class Result {
    public string Type
    public string Color;
}

Result次のようなクエリから のリストを取得します。

Car   ->  Red
Car   ->  Blue
Boat  ->  Brown
Boat  ->  Yellow
Boat  ->  Green
Plane ->  White

List<Vehicle>このリストをLINQで選択したい。私はこれを試しましたが、うまくいきませんでした:

var List<Vehicle> = results.Select(v => new Vehicle
    {
    Type = v.Type;
    Colors = new List<Color> { new Color = v.Color }
    }

ここである種のグループを使用する必要があると確信していますが、その方法がわかりません。

4

2 に答える 2

3

電話で行く必要があるGroupByようです:

var query = input.GroupBy(x => x.Type, x => x.Color)
                 .Select(g => new Vehicle { Type = g.Key, Colors = g.ToList() })
                 .ToList();

GroupBy呼び出しをスキップできる別のオーバーロードがあることに注意してください。ただしSelect、この方法の方が簡単だと思います。別の形式が必要な場合はお知らせください。

オブジェクトでこれらが本当に必要ない場合は、 :Vehicleを使用するだけでよいことに注意してください。Lookup

var lookup = input.ToLookup(x => x.Type, x => x.Color);

foreach (var color in lookup["Car"])
{
    // ...
}

これは、クエリを実行している特定のメソッド内の結果のみが必要な場合に便利List<Vehicle>ですが、データを他の場所に伝播する場合は、を作成する方が理にかなっています。

于 2012-11-30T14:59:17.243 に答える
0
results.GroupBy(r => r.Type)
       .Select(g => new Vehicle { 
                                   Type = g.Key, 
                                   Colors = t.Select(p => p.Color).ToList()
                                })
       .ToList()
于 2012-11-30T14:57:59.770 に答える