zoukankan      html  css  js  c++  java
  • LINQ多条件OR模糊查询

    需求是这样的,有一张表tbl(Key[int],Value[string]),数据存储如下:

     
    Key Value
    1 -a-b-
    2 -a-
    3 -c-e-
    4 -f-g-

    现在的目的是要从tbl表中取出所有Value字段的值和List的值匹配的记录。本地有个List<string>{"a","b","c"};

    传统的T-SQL写法是:select * from tbl where Value like '%a%' or Value like '%b%' or Value like '%c%' 如何用linq实现呢?

    我第一个想到的是这样的:

    var query=from q in tbl select q;

    foreach(var item in list) { query=query.Where(r=>r.Value.Contains(item)); }

    但是这样做生成的T_SQL语句是:select * from tbl where Value like '%a%' and Value like '%b%' and Value like '%c%'

    唉,真蛋疼,百度了好多全都无解,最后看到了一篇帖子,给了我点启发,帖子链接如下: http://social.msdn.microsoft.com/Forums/de-DE/238/thread/b8ea22a7-f733-4ff5-8333-0dd3fe558076

    经过思路整理,最终代码如下:

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                var dt = new DataTable();
    
                dt.Columns.Add("Key", typeof (int));
    
                dt.Columns.Add("Value", typeof (string));
    
                dt.Rows.Add(1, "-a-b-");
    
                dt.Rows.Add(2, "-a-");
    
                dt.Rows.Add(3, "-c-e-");
    
                dt.Rows.Add(4, "-f-g-");
    
                var list = new List<string> {"a", "b", "c"};
    
                var query = from q in dt.AsEnumerable()
    
                            from t in list
    
                            where q.Field<string>("Value").Contains(t)
    
                            select q;
    
                var vdt = query.Distinct().CopyToDataTable();
    
                foreach (DataRow dr in vdt.Rows)
    
                {
    
                    Console.WriteLine(dr["Key"] + "\t" + dr["Value"]);
    
                }
    
            }
    
        }
    View Code

    大功告成,输出结果如下:

    1 -a-b-

    2 -a-

    3 -c-e-

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/guyun/p/2729888.html
Copyright © 2011-2022 走看看