7

さて、私が持っているとしましょうList<car>。各車にはList<part>. 各パーツには がID関連付けられています。私は に しか与えられておらずID、それを含むpartを見つけたいと思っています。これを見つける最良の方法は何ですか?carpartcar

4

6 に答える 6

15

LINQではどうですか?

List<Car> cars = ...
var carToFind = cars.FirstOrDefault(car => car.Parts.Any(part => part.Id == idToFind));

英語では、「目的の ID と一致する ID を持つ部品を持つ最初の車 (そのような車が存在しない場合は null) を見つけます。」

于 2012-07-27T17:07:10.060 に答える
5
var id = 123;
var cars = new List<Car>();
var theCar = cars.Single(
          car => car.parts
                    .FirstOrDefault(part => part.Id == id) != null
          );
于 2012-07-27T17:05:03.167 に答える
2

次のような LINQ クエリを実行できます。

// List<car> cars;
int id = 101;
var result = Cars.Where (c => c.parts.Where (p => p.ID == id).Any ());
于 2012-07-27T17:06:46.257 に答える
1

検索内で検索

List<car> cars = new List<Car>();
List<car> carWithParts = cars.Find(x => x.parts.Any(y => y.PartID=123));

これは、複数の車に同じ PartID が含まれている可能性がある場合に機能します。

于 2012-07-27T17:11:33.993 に答える
1

どうですか:

foreach(Car car in listOfCars)
{
    if (car.parts.Contains(partID))
    {
        return car;
    }
}

Edit2:ああ、あなたの車には partID のリストがあると誤解していました。

では、その場合は…

foreach(Car car in listOfCars)
{
    foreach(Part part in car.parts)
    {
        if (part.id == partId)
        {
            return car;
        }
    }
}

Edit1:ユースケースによっては、パーツ ID から車にマップする「インデックス」を維持することも理にかなっている場合があります。何かのようなもの:

var partIDToCar = Dictionary<string, Car>();

車に部品を取り付けるときに、インデックスを更新します。

partIDToCar[partID] = car;

次に、車を取得するための簡単なチェックです。

if (partIDToCar.ContainsKey(partID))
{
    return partIDToCar[partID];
}
于 2012-07-27T17:03:57.217 に答える
0
 var thePart;

 foreach (var part in list<parts>)
 {
 if (part.id = ID)
 thePart = part;
 }

 foreach (var car in list<cars>)
 {
 if (car.Part = thePart)
 return car;
 }
于 2012-07-27T17:04:18.600 に答える