7

好的,假设我有一个List<car>. 每辆车还包含一个List<part>. 每个部分都有一个ID与之关联的。我只得到了IDa part,我想找到car包含那个的part。找到这个的最好方法是什么car

4

6 回答 6

15

使用 LINQ 怎么样?

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

用英语:“查找第一辆汽车(如果不存在这样的汽车,则为 null),其任何部件的 Id 与所需的 Id 匹配。”

于 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

怎么样:

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 回答
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 回答
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 回答