LINQ援助

时间:2015-04-07 06:35:28

标签: c# .net winforms linq

我的winform中有10个文本框。

为了执行某些验证,我使用OnValidating事件处理程序进行一些处理。为方便起见,我在IEnumerable集合中添加了所有这些文本框控件。

IEnumerable<TextBox> txtBoxList;

在OnValidating事件处理程序中,我需要LINQ查询帮助以字符串集合的形式获取文本框的所有当前值

即。 IList<string> contentList;

现在,我的要求是将文本框的值(非空)作为字符串集合。我想利用LINQ。

我使用的这个查询只返回不同的值

contentList = txtBoxList.GroupBy(t => t.Text)
                        .Where(g => !string.IsNullOrEmpty(g.Key))
                        .Select(grp => grp.Key)
                        .ToList();

即,如果textbox1和textbox2具有相同的内容,

ex: textbox1 : "John" and textbox2 : "John" 

然后它只返回一次&#34; John&#34;。

我需要您的帮助才能在字符串集合中获取文本框的所有值( 包括重复项

等待回应 VATSAG

4 个答案:

答案 0 :(得分:4)

如果我理解正确,那么你想要

this.Controls.OfType<TextBox>().Where(tb => !string.IsNullOrEmpty(tb.Text))
                               .Select(tb => tb.Text);

在表单上查找文本框中的所有控件,选择那些不为空的控件,并获取文本

您可能想要做的是先将文本框添加到面板,然后在该面板上找到文本框..

panelName.Controls.OfType<TextBox>()....

答案 1 :(得分:1)

你不能做

contentList = txtBoxList.Where(t => t.Text != null)
                        .Select(t => t.Text)
                        .ToList();

答案 2 :(得分:1)

您按文字分组,e。 G。 “john”,“john”,“doe”,“bla”将成为“john”,“doe”,“bla”因为你正在分组相同的字符串。

您可以这样做:

contentList = txtBoxList.Where(g => !string.IsNullOrEmpty(g))
                        .Select(t => t.Text)
                        .ToList();

答案 3 :(得分:0)

contentList = txtBoxList.GroupBy(t => t)
                        .Where(g => !string.IsNullOrEmpty(g.Key))
                        .SelectMany(grp => grp.Skip(1))
                        .ToList();

这将列出所有重复项。