【问题标题】:Filter DataTable with any match of a string使用任何匹配的字符串过滤 DataTable
【发布时间】:2014-03-31 02:18:42
【问题描述】:

我想知道是否可以在 .NET DataTable 上应用过滤器或选择,以匹配包含 至少一个单词的任何行或搜索词的字母,例如:

搜索字词:“旧金山”

将匹配:“北 旧金山”, “旧金山”、“洛杉矶”、“山顶

**:因为它们包含“San”或“Francisco”或“South”。

我知道这听起来很疯狂,但任何建议都非常感谢!

【问题讨论】:

    标签: c# sql regex linq datatable


    【解决方案1】:

    DataTable.Select supports like

    var str = "South San Francisco";
    var filteredRows = dt.Select("Column LIKE '%" + str + "%'");
    

    对于更复杂的过滤器,使用 Linq to DataSets

    dt.AsEnumerable().Where(dr => 
                            {
                                var wordsSplited = dr.Field<string>("Column").Split(' ');
                                var words = new HashSet<string>(wordsSplited);
    
                                var inputSplitted = str.Split(' ');
                                return words.Intersect(inputSplitted).Any();
                            });
    

    【讨论】:

    • 谢谢,我的示例不是很清楚,我需要匹配任何单词,即使它们之间没有匹配,例如:“San South Francisco”。
    • 您可以使用 linq 数据集,例如 dt.AsEnumerable().Where(dr => dr.Field("Column").Split(' ') 包含来自输​​入的单词
    • 查看编辑后的答案以获取更多详细信息...我认为词序在输入和列中并不重要...但是您可以在此处进行任何变体,因为您有文本和列...希望这个帮助
    【解决方案2】:

    如果我理解清楚,我想你想要这个;

    var south = "South";
    var san =  "San";
    var fran = "Francisco";
    var filteredRows = dt.Select("Column LIKE '%" + south + "%' OR Column LIKE '%" + san + "%' OR Column LIKE '%" + fran + "%'");
    

    【讨论】:

    • 我将其更改为 AND 而不是 OR 因为我只想要包含所有单词的行。我一直忘记你可以在datatable select方法中使用SQL语法,其实很简单
    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-22
    相关资源
    最近更新 更多