我有一个名为BG的课程,它有一个名为Name Code的属性。 我实例化一个名为bgList的对象。 现在我试图获取将其“Crop”属性设置为cropName的对象的所有代码。
我想将以下工作代码转换为linq但是因为我的生活无法做到这一点 - 我很确定我错过了一些东西:
List<string> breedingGroupsAndRoles = new List<string>();
for (int i = 0; i < bgList.Count; i++)
{
if (bgList[i].Crop == cropName)
breedingGroupsAndRoles.Add(bgList.[i].Code);
}
我最接近的是这个,但它只给我第一个项目:
breedingGroupsAndRoles.Add(bgrList.Find(c => c.Crop == cropName).Role);
答案 0 :(得分:13)
List<string> breedingGroupsAndRoles = bgList
.Where(bg => bg.Crop == cropName)
.Select(bg => bg.Code)
.ToList();
答案 1 :(得分:3)
为了完整起见,您尝试调用bgList
的{{3}}不是LINQ的一部分,它是Find
method本身的成员。它只返回与您提供的谓词匹配的第一个元素,这就是为什么您只得到一个结果。您可能想要generic List
class,它返回所有匹配元素的列表:
List<BG> breedingGroups = bgList.FindAll(c => c.Crop == cropName);
请注意,这会生成匹配BG
个实例的列表,而不仅仅是Role
个属性。根据您处理结果的方式,这可能就足够了,否则您仍然需要LINQ或循环以及第二个列表来提取Role
值。无论如何,像@Tim Schmelter这样的全LINQ解决方案可能是更好的选择。