如何将正常的foreach替换为linq ForEach?

时间:2016-08-26 07:38:29

标签: c# linq foreach

public static List<TDuplicate> ValidateColumnInList<TItem, TDuplicate>(List<TDuplicate> DuplicateExpression) where TDuplicate : DuplicateExpression
{
    List<TDuplicate> TempDuplicateExpression = new List<TDuplicate>();
    var itemProperties = typeof(TItem).GetProperties();
    foreach (var DplExpression in DuplicateExpression)
    {
        bool IsContainColumn = itemProperties.Any(column => column.Name == DplExpression.ExpressionName);
        if (!IsContainColumn)
        {
            TempDuplicateExpression.Add(DplExpression);
        }
    }
    return TempDuplicateExpression;
}

在上一节中,如何将上述foreach替换为linq ForEach

2 个答案:

答案 0 :(得分:0)

此处您不需要foreachForEach。下面的代码应该给你结果:

var itemProperties = typeof(TItem).GetProperties();
List<TDuplicate> tempDuplicateExpression = DuplicateExpression
    .Where(m => !itemProperties.Any(column => column.Name == m.ExpressionName))
    .ToList();

return tempDuplicateExpression;

答案 1 :(得分:0)

您可以通过这种简单的方式获得结果:

var result = DuplicateExpression.Where(n=>!itemProperties.Any(column => column.Name == n.ExpressionName)).ToList();

或者您可以像这样使用ForEach:

DuplicateExpression.ForEach(n=>
    {
        bool IsContainColumn = itemProperties.Any(column => column.Name == n.ExpressionName);
        if (!IsContainColumn)
        {
            TempDuplicateExpression.Add(n);
        }
    }
)