2015-04-06 66 views
0

我有一個包含TextBox控件的列表。基本上所有這些分組在一個groupbox控件中。使用LINQ搜索列表<TextBox>中的重複條目使用LINQ

List<TextBox> listTextBox; 

每當調用groupbox驗證事件時,我需要檢查這些文本框中的任何重複條目。

我只能想到無聊的方式是按順序循環訪問列表並每次解析文本框的值,並查找是否有多個具有相同值的條目。

任何人都可以幫助我通過使用謂詞來更有效地執行相同的操作。

對於前:

list.Count(//predicate that gets the value for all textbox); 

如果計數大於1,那麼我敢肯定有在文本框中重複的條目。

還有其他更好的方法嗎?

乾杯 VATSAG

+0

你想登記所有重複的文本嗎? – bit 2015-04-06 06:29:54

+0

要麼登記,要麼計數超過1(提示重複)。 – 2015-04-06 06:33:50

回答

5

你可以使用GroupBy,然後用Count> 1篩選組和選擇Key所有這些文本。我沒有遵守代碼,但這應該足夠接近。

var duplicateTexts= 
     listTextBox.GroupBy(tb => tb.Text) 
      .Where(group => group.Count() > 1) 
      .Select(group => group.Key); 
+0

這個謂詞會給我重複條目的關鍵。但是有沒有辦法讓計數? – 2015-04-06 06:43:20

+0

只需做.Count()的duplicateTexts? – bit 2015-04-06 06:45:39

+0

我編輯了我的答案。在遍歷期間,您可以獲得密鑰並計算兩者。 – 2015-04-06 06:50:22

1

大致這樣的事情可能會起作用。

var duplicates = listTextBox 
     .GroupBy(i => i.Text) 
     .Where(g => g.Count() > 1) 
     .Select(g => new {Count = g.Count(), 
          Name = g.Key}); 
    foreach (var d in duplicates) 
    { 
     var keyName = d.Key; 

     var count = d.Count; 
    }