2011-06-28 70 views
0

我想寫一個LINQ查詢,如果有多個具有相同值的屬性的對象,將返回true。查詢以確定一個屬性是否有多個元素具有相同的值?

以下是我想出了這麼遠:

Formatters.Where(Function(f As DataModel.Formatter) _ 
                Formatters.Select(Function(f2 As DataModel.Formatter) f2.Name.ToLower()).Contains(f.Name.ToLower())).Count > 1 

但是上面總是返回true,只要他們是在列表中更多的則1元,可有人請給我個忙。 ?

回答

2

這裏是在C#中。應該很容易轉換爲VB.NET,但我沒有一個視覺工作室安裝得心應手:

var query = from g in Formatters.GroupBy(f => f.Name, StringComparer.OrdinalIgnoreCase) 
       where g.Count() > 1 
       select g; 

    if (query.Any()){ 
     Console.WriteLine("Duplicate names!"); 
    } 
+0

我懷疑你需要在那裏的ToLower調用,但否則看起來不錯。 –

+0

我更改我的代碼以使用接受IEqualityComparer的GroupBy的重載,以避免使用ToLower。感謝您的領導! –

+0

如果您已經明確使用GroupBy,那麼可能也值得使用Where作爲擴展方法 - 它最終會變得更簡單的代碼。 –

相關問題