1

我一直在使用 Linq to Entity Framework 并且一直很喜欢它。

但是,我现在需要在 sql server 上查询一个完全动态的数据库表。我不知道编译时的表名、结构或列名。

有没有办法使用类似 Linq 的语法来编译 SQL 查询?我在运行时获得了表名和列名,我需要使用 order by 进行复杂的搜索(例如 where cola = x and (cola = y or colb = z) or (colc in n..p))并可能分组

我发现了一些看起来很有希望的东西,http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx,但我不明白a)如何动态选择任意表b)如何防止注入。作者说“第 2 部分”中还有更多内容——但我找不到任何指向它的链接,并且该博客来自 2008 年。

我在想象一些语法,比如

public void SelectPizzasCheaperThan(int price) {
    var table = con.selectDB(tablename);
    var result = table.where(x => x.Field<string>("Food") = "Pizza");
    result = result.where(x => x.Field<int>("price") < price);
    result = result.select(x => new {Name = field<string>("Name"), Price = field<int>("price")}).ToList();
}

(显然,那些硬编码的字符串将是在运行时定义的任意变量)

已经有这样的事情了吗?特别是,来自微软的任何东西?

谢谢阅读

4

1 回答 1

0

参数是注射安全的。

SqlCommand.Parameters 属性

对 SqlDbType 使用 switch (if elseif) 但您可以动态构建它们。

于 2013-04-08T21:44:22.977 回答