I am working with a List of Component objects, componentList.
Component has method GetPosition which returns position of a component via component.GetPosition(out position, out orientation).
I can get X, Y, Z via position.X, position.Y, position.Z.
I have a separate List<CSVPart> imported from a CSV file. Each list item also has X, Y, Z. I want to find Component which matches X, Y, Z from the list of CSV parts.
I have tried:
foreach (CSVPart p in csvParts)
{
foundComponent = componentList
.Where(c => c.Name == p.PartNumber & ... == p.X & ... == p.Y & ... == p.Z
)
}
Where Name corresponds to PartNumber and ... corresponds to me staring blankly at the screen.
I've tried nesting the subsequent statements to compare X, Y, Z in {} but nothing I've tried worked. How do I get the out results into this Linq query? Thanks in advance for help.
CodePudding user response:
I would suggest you don't try to do it in a single expression. Instead, either write a method that does the matching you want and refer to that in your query, or use a block-bodied lambda:
foreach (CSVPart p in csvParts)
{
var foundComponent = componentList.FirstOrDefault(c =>
{
// Avoid finding the position if the name doesn't match.
if (c.Name != p.PartNumber)
{
return false;
}
c.GetPosition(out var position, out var _);
return position.X == p.X && position.Y == p.Y && position.Z == p.Z;
});
// foundComponent will be null or the first match
}
(I've changed from Where to FirstOrDefault as the name suggests you're trying to find a single value...)
