由于Linq查询主要是强类型查询,所以很难做到像sql语句一样,在执行前可以动态拼接。
不过通过方法或者集合方式也可以实现一定的动态化。
1.字段的动态拼接:其实就是对一个数据集多次检索。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | List<Custom_Organization> Default = GetDefault(); List<Custom_Organization> COs = Default; #region 搜索 string OrganizationName = TextBoxOrganizationName.Text.Trim(); string ParentID = TextBoxParentID.Text.Trim(); string CountryName = TextBoxCountryName.Text.Trim(); string RegionName = TextBoxRegionName.Text.Trim(); #region 机构名称 if (OrganizationName != "" ) { if (CheckBoxOrganizationName.Checked) { var result = from o in COs where o.OrganizationName.ToLower() == OrganizationName.ToLower() select o; if (result.Count() > 0) { COs = result.ToList(); } } else { var result = from o in COs where o.OrganizationName.Contains(OrganizationName) select o; if (result.Count() > 0) { COs = result.ToList(); } } } #endregion #region 国家,地区 { var result = from o in COs where o.CountryName.Contains(CountryName) && o.RegionName.Contains(RegionName) select o; if (result.Count() > 0) { COs = result.ToList(); } } #endregion #region 机构类型 List< string > list1 = GetCustom_OrganizationTypes(); if (list1.Count > 0) { var result = from o in COs where list1.Contains(o.OrganizationID) select o; if (result.Count() > 0) { COs = result.ToList(); } } #endregion #region 父机构(包括自己) List< string > list2 = GetParentIDs(); if (list2.Count > 0) { var result = from o in COs where list2.Contains(o.ParentID)|| list2.Contains(o.OrganizationID) select o; if (result.Count() > 0) { COs = result.ToList(); } } #endregion #region 排序 string Order = DropDownListOrder.SelectedValue; if (Order == "2" ) { var result = from o in COs orderby o.Count descending select o; if (result.Count() > 0) { COs = result.ToList(); } } #endregion #endregion |
2.动态的or操作。可以简单的使用list创建搜索集合。
#region 搜索 List<string> list = new List<string>(); list.Add("str1"); list.Add("str2"); list.Add("str3"); var v = from A in Models from B in list where A.数据.Contains(B) select A; #endregion
或者
#region 搜索 List<string> list = new List<string>(); list.Add("str1"); list.Add("str2"); list.Add("str3"); var result = from o in Models where list.All(s => o.数据.Contains(s)) #endregion
3.动态的and操作。可以简单的使用list创建搜索集合。
当然不写方法直接循环执行也可以。
#region 搜索 List<string> list = new List<string>(); list.Add("str1"); list.Add("str2"); list.Add("str3"); List<string> Models = new List<string>(); foreach (string l in list) { Models = GetSearch(Models, l); } #endregion List<string> GetSearch(List<string> ss, string str) { var v = from A in ss where A == str select A; List<string> Models = v.ToList(); return Models; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2016-02-23 vmware全屏后去掉上面的横杠
2016-02-23 VMware安装操作系统(Operating System not found一个错误原因)
2016-02-23 IC卡和RFID卡的区别(网上说的都不准确)
2009-02-23 const和static readonly 区别