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)时间内运行。