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

C# 检查列表中重复项的更好方法,c#,asp.net-mvc,asp.net-mvc-validation,C#,Asp.net Mvc,Asp.net Mvc Validation,在使用“验证”属性将对象列表从视图发布到控制器时,我正在检查是否存在任何重复项。它可以工作,但我想知道是否有更好的方法可以遵循(可能是添加客户端验证)。感谢您的反馈 [AttributeUsageAttribute(AttributeTargets.Property, AllowMultiple = true, Inherited = false)] public class DuplicateObjectAttribute : ValidationAttribute { public

在使用“验证”属性将对象列表从视图发布到控制器时,我正在检查是否存在任何重复项。它可以工作,但我想知道是否有更好的方法可以遵循(可能是添加客户端验证)。感谢您的反馈

[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;
    }
}
[AttributeUsageAttribute(AttributeTargets.Property,AllowMultiple=true,Inherited=false)]
公共类DuplicateObjectAttribute:ValidationAttribute
{
公共覆盖布尔值有效(对象值)
{
if(值!=null)
{
if(value.GetType()==typeof(List))
{
列表对象列表=(列表)值;
if(objOrdersList!=null&&objOrdersList.Count>0)
{
if(objOrdersList.Select(p=>p.OrderId).Distinct().Count()!=objOrdersList.Select(p=>p.OrderId.Count())
返回false;
}
}
}
返回true;
}
}

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

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

foreach (var d in duplicates)
    ;//dosomething

这是基于MSDN条目的,

谢谢Austin,我想获得建议/反馈,因为我在项目的许多视图中使用了它。@Sundeep就性能而言,这不应该是个问题。我相信它在O(n)时间内运行。