LINQ多条件OR模糊查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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"]);

            }

        }

    }

  

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

1 -a-b-

2 -a-

3 -c-e-

转载:

http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html

以上是关于LINQ多条件OR模糊查询的主要内容,如果未能解决你的问题,请参考以下文章

python mongoDB 模糊查询(多条件)

linq语句,常用的查询,模糊查询,实体查询

怎么用linq to sql 写单表多字段的模糊查询方法

Mysql查询详解(条件查询、子查询、模糊查询、连接查询。。。)

thinkphp5 怎么将变量作为模糊查询条件

jsp如何按指定条件进行模糊查询