LINQ多条件OR模糊查询

简介: 本文章转载:http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html 需求是这样的,有一张表tbl(Key[int],Value[string]),数据存储如下:   Key Value 1 -a-b- 2 -a- 3 -c-e- 4 -f-g- 现在的目的是要从tbl表中取出所有Value字段的值和List的值匹配的记录。

本文章转载:http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html

需求是这样的,有一张表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%'

同样也可以像SQL语句这样:select * from tb1 as a inner join tb2  as b on a.value like  "%'+b.value; 

唉,真蛋疼,百度了好多全都无解,最后看到了一篇帖子,给了我点启发,帖子链接如下: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-

目录
相关文章
|
前端开发
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2023Web前端开发八股文&面试题(万字系列)——这篇就够了!
2672 2
|
传感器 机器学习/深度学习 算法
无人机视角yolo多模态、模型剪枝、国产AI芯片部署
无人机视角yolo多模态、模型剪枝、国产AI芯片部署
无人机视角yolo多模态、模型剪枝、国产AI芯片部署
|
11月前
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
539 0
|
7月前
|
存储 算法 数据安全/隐私保护
基于MPC控制器的混合动力EMS能量管理系统simulink建模与仿真
本课题研究混合动力汽车能量管理系统,系统分为多个模块:能量管理(含MPC控制器与驱动扭矩模块)、动力模型(含蓄电池、发电机、电动机、汽油发动机、EMS及PEU模块)。通过MPC控制器优化功率分配,优先使用电池能源,降低SOC并减少系统功耗,实现更节能的效果。核心程序基于MATLAB2022a开发,结合车辆动力学与各部件模型,完成多目标优化,提升燃油经济性和排放性能。
|
10月前
|
算法 数据安全/隐私保护
基于GARCH-Copula-CVaR模型的金融系统性风险溢出效应matlab模拟仿真
本程序基于GARCH-Copula-CVaR模型,使用MATLAB2022A仿真金融系统性风险溢出效应。核心功能包括计算违约点、资产价值波动率、信用溢价及其直方图等指标。GARCH模型用于描述资产收益波动性,Copula捕捉依赖结构,CVaR度量极端风险。完整代码无水印输出。 具体步骤:首先通过GARCH模型估计单个资产的波动性,再利用Copula方法构建多资产联合分布,最后应用CVaR评估系统性风险。程序展示了详细的运行结果和图表分析,适用于金融市场风险量化研究。
|
分布式计算 Kubernetes 流计算
Iceberg+Amoro+CloudEon体验云原生数据湖
通过使用CloudEon、Iceberg、Flink、Spark和Amoro,您可以轻松地在Kubernetes上构建一个强大的大数据基础环境。
932 0
番茄工作方法以及番茄工作表
番茄工作方法以及番茄工作表
448 0
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
283 1
|
存储 安全 网络安全
|
关系型数据库 MySQL 数据处理
针对MySQL亿级数据的高效插入策略与性能优化技巧
在处理MySQL亿级数据的高效插入和性能优化时,以上提到的策略和技巧可以显著提升数据处理速度,减少系统负担,并保持数据的稳定性和一致性。正确实施这些策略需要深入理解MySQL的工作原理和业务需求,以便做出最适合的配置调整。
1617 6