好的,我们假设我有List<car>
。每辆车还包含List<part>
。每个部分都有ID
与之关联。我只给ID
part
,我想找到包含car
的{{1}}。查找此part
的最佳方式是什么?
答案 0 :(得分:9)
使用LINQ怎么样?
List<Car> cars = ...
var carToFind = cars.FirstOrDefault(car => car.Parts.Any(part => part.Id == idToFind));
英文:“找到第一辆车(如果没有这样的车,则为null),其中任何部件的Id都与所需的Id匹配。”
答案 1 :(得分:4)
var id = 123;
var cars = new List<Car>();
var theCar = cars.Single(
car => car.parts
.FirstOrDefault(part => part.Id == id) != null
);
答案 2 :(得分:2)
您可以像这样执行LINQ查询:
// List<car> cars;
int id = 101;
var result = Cars.Where (c => c.parts.Where (p => p.ID == id).Any ());
答案 3 :(得分:1)
怎么样:
foreach(Car car in listOfCars)
{
if (car.parts.Contains(partID))
{
return car;
}
}
编辑2:啊,我误解了,并且认为你的车有一份partID列表。
所以,在那种情况下......
foreach(Car car in listOfCars)
{
foreach(Part part in car.parts)
{
if (part.id == partId)
{
return car;
}
}
}
编辑1:根据您的使用情况,维护从部件ID映射到汽车的“索引”也可能有意义。类似的东西:
var partIDToCar = Dictionary<string, Car>();
当您在汽车中放置零件时,您需要更新索引:
partIDToCar[partID] = car;
然后,这是一个快速检查以获得汽车:
if (partIDToCar.ContainsKey(partID))
{
return partIDToCar[partID];
}
答案 4 :(得分:1)
在查找
中查找List<car> cars = new List<Car>();
List<car> carWithParts = cars.Find(x => x.parts.Any(y => y.PartID=123));
如果多辆汽车可以包含相同的PartID,这将有效。
答案 5 :(得分: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;
}