【发布时间】:2013-04-08 21:34:31
【问题描述】:
我使用 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();
}
(显然,那些硬编码的字符串将是在运行时定义的任意变量)
已经有类似的东西了吗?尤其是来自微软的任何东西?
感谢阅读
【问题讨论】:
-
如果数据库是完全动态的并且在编译时不知道,那么为什么要使用 EF?
-
抱歉,我不打算使用 EF。但是,我确实喜欢具有注入安全性和惰性求值的 EF 语法。我想知道是否有任何类似于 EF 的东西,但没有编译时实体
-
您追求的不是“EF 语法”。它被称为 LINQ。有 LINQ to XML、LINQ to Objects,甚至 LINQ to SQL 等。它们中的每一个都可能有自己特定的方法来处理它们正在使用的数据类型,但语法是相似的。
-
@Nick 是的,有 SQL to LINQ,但没有已知的数据库可以创建,并且从中丢失了很多对象模型。
-
你没有阅读我的评论。我指出 LINQ 并非特定于实体框架。
标签: .net sql linq dynamic-sql