更好的方法来检查列表中的重复项

时间:2013-01-07 19:07:01

标签: c# asp.net-mvc asp.net-mvc-validation

我通过使用验证属性在从视图到控制器发布对象列表时检查是否有任何重复项。它有效,但我想知道是否有更好的方法可以遵循(可能是添加客户端验证)。任何反馈意见。

[AttributeUsageAttribute(AttributeTargets.Property, AllowMultiple = true, Inherited = false)]
public class DuplicateObjectAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
       if (value != null)
       {
         if (value.GetType() == typeof(List<OrdersVM>))
         {
             List<OrdersVM> objOrdersList = (List<OrdersVM>)value;
             if (objOrdersList != null && objOrdersList.Count > 0)
             {
                 if (objOrdersList.Select(p => p.OrderId).Distinct().Count() != objOrdersList.Select(p => p.OrderId).Count())
                 return false;
             }
         }
       }
       return true;
    }
}

1 个答案:

答案 0 :(得分:2)

你的表现不够好吗?我做了类似的事情:

var duplicates = listOfItems
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

foreach (var d in duplicates)
    ;//dosomething

这是基于MSDN条目Find Duplicates using LINQ