C# 没有数据库模型的C动态查询

C# 没有数据库模型的C动态查询,c#,linq,linq-to-sql,dynamic,C#,Linq,Linq To Sql,Dynamic,我一直在网上搜索动态查询的解决方案 我发现了许多不同的解决方案,例如Linq到Sql、动态Linq表达式、动态查询,但所有这些解决方案都涉及到数据库的一些以前的知识,比如代码中的模型。也许我要问的是远离深层次的问题,但是有没有任何可能的方法可以在没有模型的情况下动态查询数据库 例如,数据库有一个包含以下列的Customers表: 客户编号 名称 偏爱颜色 我想从@0=@1的客户创建一个查询,作为SELECT Name,这两个占位符是动态填充的。结果数据与模型类无关,我更愿意使用某种框架来构建查询

我一直在网上搜索动态查询的解决方案

我发现了许多不同的解决方案,例如Linq到Sql、动态Linq表达式、动态查询,但所有这些解决方案都涉及到数据库的一些以前的知识,比如代码中的模型。也许我要问的是远离深层次的问题,但是有没有任何可能的方法可以在没有模型的情况下动态查询数据库

例如,数据库有一个包含以下列的Customers表:

客户编号 名称 偏爱颜色 我想从@0=@1的客户创建一个查询,作为SELECT Name,这两个占位符是动态填充的。结果数据与模型类无关,我更愿意使用某种框架来构建查询,而不是简单的字符串连接

System.Linq.Dynamic名称空间非常接近于满足这个请求,但它使用了一个数据库模型

我知道这很疯狂,但我只是好奇

SQL查询参数只能代替文字值。你 不能将参数用于表名、列名、值列表、, 或其他SQL语法。这是所有品牌的SQL的标准行为 数据库

就我所知,您无法使列名动态化,您可以考虑使此查询动态化的唯一方法是使用类似string.Format或StringBuilder的内容,并结合一些正则表达式/规则,检查列名是否为有效名称(如果是用户直接输入的话)。。如果它是由您控制的,那么就不必担心,因为您可以放心,不会有SQL注入。如果用户负责提供列名,请确保将用户输入映射到代码中的某个列名

现在可以对参数本身进行参数化,为此,您可以使用SqlCommand类使用普通的旧ADO.NET,然后动态添加参数进行查询。以下是您可以参考的资源:


希望这能有所帮助。

看看Dapper:

Insight与Dapper相似:

它没有那么疯狂。你的数据库是什么风格的?根据需要支持的后端,有几种方法。