int count = 0;
foreach (Treatment treatment in DeclarationContent.Treatments)
{
if (treatment.TreatmentNumber == treatmentNumber)
break;
count++;
}
我希望获得一份关于上述foreach声明的Linq声明。
答案 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();