2015-04-06 34 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; 
    }