2013-01-07 37 views
-2

我檢查是否有任何重複,同時通過使用驗證屬性張貼對象從視圖到控制器。它的工作原理,但我想知道是否有更好的方法可以遵循(可能會添加客戶端驗證)。任何反饋讚賞。更好的方法來檢查列表中的重複項

[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; 
    } 
} 

回答

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

+0

感謝奧斯汀,我想是因爲我的意見在我的項目數用它來獲得建議/反饋。 – Sunny

+0

@Sundeep就績效而言,這不應該是一個問題。我相信它在O(n)時間運行。 –

相關問題