C# linq查询

david_88888 2015-04-01 11:38:05
关于从前端界面传查询值到后台linq查询,先看下截图"


我的想法是从前端查询界面组织了查询字符如:Name like '李%' and age > 20传到后台,由于我的数据访问用的是EF,查询也就是Linq表达式:myLfacs.BaseMachine.Where(p => p.AutoID == 8).ToList(),我想有没有什么方法把前端传来的查询字符串转成Linq的查询形式,因为从前端组织查询条件比较灵活!
还有一种方法就是用EF的自定义方法查询也可以,myLfacs.database.sqlQuery<>(strSqlWhere),这样执行自定义sql是没问题的,
我主要就是了解下有没有其它的方法可以把Name like '李%' and age > 20像这种查询字符串直接转成Linq的查询方式.
像一般大型的ERP都是用户在前端组织了查询语句传到后台查询的.
...全文
274 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
david_88888 2015-04-02
  • 打赏
  • 举报
回复
引用 10 楼 yyy_dahaihao 的回复:
利用%通配符进行查询 // 显示查询数据库信息 // <returns>方法返回DataTable对象</returns> private DataTable GetStudent(string Name) { string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串 @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd="); string P_Str_SqlStr = string.Format(//创建SQL查询字符串 "SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student WHERE 学生姓名 LIKE '{0}%'", Name); SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器 P_Str_SqlStr, P_Str_ConnectionStr); DataTable P_dt = new DataTable();//创建数据表 P_SqlDataAdapter.Fill(P_dt);//填充数据表 return P_dt;//返回数据表 }//codego.net/ // 查询数据库信息 // <returns>方法返回DataTable对象</returns> private DataTable GetMessage() { string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串 @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd="); string P_Str_SqlStr = string.Format(//创建SQL查询字符串 "SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student"); SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器 P_Str_SqlStr, P_Str_ConnectionStr); DataTable P_dt = new DataTable();//创建数据表 P_SqlDataAdapter.Fill(P_dt);//填充数据表 return P_dt;//返回数据表 }
兄弟你这个是ado.net很早就搞过了,我用的是ef,谢谢啦,一起研究下。。。。
yyy_dahaihao 2015-04-02
  • 打赏
  • 举报
回复
利用%通配符进行查询 // 显示查询数据库信息 // <returns>方法返回DataTable对象</returns> private DataTable GetStudent(string Name) { string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串 @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd="); string P_Str_SqlStr = string.Format(//创建SQL查询字符串 "SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student WHERE 学生姓名 LIKE '{0}%'", Name); SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器 P_Str_SqlStr, P_Str_ConnectionStr); DataTable P_dt = new DataTable();//创建数据表 P_SqlDataAdapter.Fill(P_dt);//填充数据表 return P_dt;//返回数据表 }//codego.net/ // 查询数据库信息 // <returns>方法返回DataTable对象</returns> private DataTable GetMessage() { string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串 @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd="); string P_Str_SqlStr = string.Format(//创建SQL查询字符串 "SELECT 学生姓名,年龄,性别,家庭住址 FROM tb_Student"); SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器 P_Str_SqlStr, P_Str_ConnectionStr); DataTable P_dt = new DataTable();//创建数据表 P_SqlDataAdapter.Fill(P_dt);//填充数据表 return P_dt;//返回数据表 }
david_88888 2015-04-01
  • 打赏
  • 举报
回复
引用 2 楼 webdiyer 的回复:
用dynamic linq,多年前用过,看这篇博客: http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library 这个nuget包好象是: https://www.nuget.org/packages/System.Linq.Dynamic.Library
兄弟你发的这个网址刚刚看到过,我用的是ef6,dynamic linq和ef6区别在哪呢,为什么ef6 不能那样查询
webdiyer 2015-04-01
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
前端直接传Lamb集合
Expression<Func<modelbool>>
david_88888 2015-04-01
  • 打赏
  • 举报
回复
StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT Count(AutoID) total FROM dbo.DoorSecrecy WHERE ").Append(strCondition); List<int> totals = myDb.Database.SqlQuery<int>(sbSql.ToString()).ToList(); sbSql.Clear(); sbSql.Append("SELECT TOP ").Append(rows).Append(" * FROM dbo.DoorSecrecy WHERE ").Append(strCondition); sbSql.Append(" AND AutoID NOT IN (SELECT TOP (").Append((page - 1) * rows).Append(") AutoID FROM dbo.DoorSecrecy WHERE "); sbSql.Append(strCondition).Append(")"); listDoorSecrecy = myDb.Database.SqlQuery<DoorSecrecy>(sbSql.ToString()).ToList(); 这种是一种方法,但是我就不想去写原生态的sql,能不能像下面这样的: var listMachine = myLfacs.BaseMachine.Where(strCondition).OrderBy(p => p.AutoID).Skip((page - 1) * row).Take(row).ToList();
Justin-Liu 2015-04-01
  • 打赏
  • 举报
回复
就用表达式查询,有一个条件Where一次就好了呗,还清晰 性能是一样的
有问又问 2015-04-01
  • 打赏
  • 举报
回复
把前端得到的看成一个字符串,在后台进行拼写不可以么?
本拉灯 2015-04-01
  • 打赏
  • 举报
回复
你这个跟我们整的报表类拟,不过这种SQL的,我们是直接调用ADO.net 返回 DataTable 了,这个属于配置的东西你再转换成LINQ返而费性能,整起来也麻烦
david_88888 2015-04-01
  • 打赏
  • 举报
回复
引用 4 楼 q107770540 的回复:
参考这个: http://blog.csdn.net/q107770540/article/details/5724013
谢谢兄弟,这个帖子已经看过了,不是我要的,因为我的查询字符串(Name like '李%' and age > 20)也许查询字在前端用符串更多,JS在前端已经拼接好了只是传到后台查询而已,不是像那样的,以前用纯sql语句查询,直接丢到sql里查询就可以了。
q107770540 2015-04-01
  • 打赏
  • 举报
回复

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧