C# Linq-条件Where/Find

C# Linq-条件Where/Find,c#,linq,lambda,C#,Linq,Lambda,我有以下两行 var productStrucutre = _service.GetProductStructureWithParent(partId).ToList(); // returns a list of objects var product = productStrucutre.Find(_ => _.Part == part); // Returns a part 如果以下条件因零件不存在而失败,那么我想返回整个产品结构 var product = productStru

我有以下两行

var productStrucutre = _service.GetProductStructureWithParent(partId).ToList(); // returns a list of objects
var product = productStrucutre.Find(_ => _.Part == part); // Returns a part
如果以下条件因零件不存在而失败,那么我想返回整个产品结构

var product = productStrucutre.Find(_ => _.Part == part);

所以这个发现会消失

我想你的意思是这样的:

var productStructure = _service.GetProductStructureWithParent(partId).ToList();
var product = productStrucutre.Where(x => x.Part == part);

return product.Any() ? 
    product :         // return only those products that fit the condition
    productStructure; // return all objects

不清楚你在问什么,试着重新表述一下你的问题。也许可以添加一个你想要的样本。作为旁注,不要将u用作lambda参数-u的语义是我不关心这个值-,如果你真的使用它,你显然关心它,它应该有一个名称。你的问题对我来说有点困惑,也许对其他人来说也一样。特别是,你说我想返回整个对象是什么意思?让我快速地重新措辞,我现在读了它,是的,它没有任何意义。如果Part是一个类,那么计划重写Equals方法,否则上面建议的==将不起作用。此外,您可能还必须重写GetHashCode。在第二种情况下,您可以使用FirstOrDefault而不是Where和SingleOrDefault。只有当product和productStructure来自同一类型时,条件运算符才能工作。在任何人与此抗争之前说:@是的,你是对的,我已经从我的答案中删除了那一部分。