Linq解决方案列表对象?

时间:2011-05-23 09:35:14

标签: c# linq

int count = 0;
foreach (Treatment treatment in DeclarationContent.Treatments)
{
    if (treatment.TreatmentNumber == treatmentNumber)
        break;

    count++;
}

我希望获得一份关于上述foreach声明的Linq声明。

2 个答案:

答案 0 :(得分:4)

var count = DeclarationContent.Treatments
                              .TakeWhile(t => t.TreatmentNumber != treatmentNumber)
                              .Count();

这使用TakeWhile仅计算所有治疗,直到某些治疗数量等于您的参数。你不能在这里使用.Where()(正如其他答案所述),因为它与foreach具有的语义不同(但是,它可能是你想要的;-))

<强>更新 我看到你想要索引,在这种情况下你也可以这样做(如果你想要.Treatment对象,可以.Index而不是Treatment。):

var index = DeclarationContent.Treatments
                              .Select((t, i) => new { Index = i, Treatment = t })
                              .First(pair => pair.Treatment.TreatmentNumber == treatmentNumber)
                              .Index;

注意: 您可能必须将DeclarationContent.Treatments替换为DeclarationContent.Treatments.Cast<Treatment>(),如评论中所述。

答案 1 :(得分:0)

int count = DeclarationContent.Treatments.TakeWhile(treatment.TreatmentNumber == treatmentNumber).Count();