这个循环可以使用简单的LINQ吗?

时间:2013-12-06 23:55:40

标签: c# linq

我有一个名为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);

2 个答案:

答案 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解决方案可能是更好的选择。