c# - 使用 Linq 查询 List<List<string>>

标签 c# linq

我有一个字符串列表(例如 List<List<string>>)- 将其视为电子表格中的行和列。

列表是动态创建的,因此行数和列数可以更改。

我想查询列(列表中的列表)(例如 List<List<string>> )以查看字符串是否匹配,如果匹配则我想返回一个新列表,其中包含所有匹配的行和列行。 基本上我让用户在列表上输入一个过滤器,然后它会显示所有匹配的行和列(它需要最好匹配任何列,但我会很高兴看到一个匹配的例子,比如此时的第一个列) .
我已经尝试了几个例子,但它们似乎都只是将列作为列表返回,但上面没有外部列表(行)。

任何帮助将不胜感激:)

这里是一个使用数据场景的例子

ColumnA   ColumnB     ColumnC
Mark       Australia   25
Marion     America     30
Fred       Dave        35

我希望能够创建一个新的 List<List<string>>包含应用过滤器的结果(最好搜索所有列和行,但对仅检查第一列的示例会很满意)。所以如果我的过滤器是 "Ma"那我应该得到一个List<List<string>>返回包含 2 行(在这种情况下,因为它匹配 Mark 和 Marion)...我不想要一个只有 Mark 和 Marion 的列表,我需要 2 行和 2 行的所有列。

最佳答案

如果您只需要在所有列表中找到一个值并在找到时返回整个列表:

string search = txtUserSearch.Text.Trim();
List<List<string>> searchResult = allLists
    .Where(list => list.Any(s => search.Equals(s, StringComparison.CurrentCultureIgnoreCase)))
    .ToList();

如果您不需要不区分大小写的搜索,您可以使用:

.Where(list => list.Contains(search))

如果你甚至想找到部分匹配(子字符串),你可以使用这个:

.Where(list => list.Any(s => s != null && s.Contains(search)))

或不区分大小写:

.Where(list => list.Any(s => s != null && s.IndexOf(search, StringComparison.CurrentCultureIgnoreCase) >= 0)

关于c# - 使用 Linq 查询 List<List<string>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275462/

相关文章:

c# - 在运行时创建 LINQ 查询到 EntityFramework 中的 GroupBy(具有继承)

c# - C# 中找不到文件错误

c# - 我可以使用在线数据构建自己的字典应用程序吗?

林克 : How do I test a List<bool> for condition where any one of its values == true?

c# - Linq 扩展表达式

c# - 如何使用 LINQ 过滤字符串 []?

c# - 使用两列的 Linq 查询分组数据表

c# - Winforms 系统托盘中的多个通知图标

c# - MS覆盖Equals()准则无法达到自己的标准。改为使用最佳做法?

c# - 编译 C++ .lib 文件使它们成为 C# 环境的 DLL