如何将此示例foreach转换为lambda表达式?
foreach (ADOMD.Member iMember in pMemberCollection)
{
decimal lDimensionValue = 0;
if (Decimal.TryParse(iMember.Name, out lDimensionValue))
lDimensionValues.Add(lDimensionValue);
}
lDimensionValues.Sort();
ADOMD.Member是一个界面,看起来像
[TypeLibType(xxx)]
[Guid("xxxxx")]
public interface Member
{
[DispId(0)]
string Caption { get; }
[DispId(1610743817)]
int ChildCount { get; }
string Name { get; }
[DispId(1610743812)]
Member Parent { get; }
[DispId(1610743819)]
bool ParentSameAsPrev { get; }
[DispId(1610743815)]
}
最佳答案
lDimensionValues =
pMemberCollection
.Cast<ADOMD.Member>()
.Select(iMember => {
decimal lDimensionValue = 0;
if (Decimal.TryParse(iMember.Name, out lDimensionValue))
return (decimal?)lDimensionValue;
else return null;
})
.Where(x => x != null)
.Select(x => x.Value)
.OrderBy(x => x)
.ToList();
非常丑陋和冗长。如果我们有一个
TryParseDecimal
方法,它将更加干净。对于LINQ来说,这不是一个完美的案例。除其他原因外,由于遗留集合显然需要
Cast
。