在大多数情况下,类是事先知道的(例如 Customer、Order);使用可视化设计器、代码或配置文件中的属性为 ORM(例如实体框架、LINQ to SQL、NHibernate、BLToolkit)描述了它们。例如,当您需要使用 Customer 类的对象时,您可以编写如下强类型查询:
db.Customers
.Where(c => c.FirstName == "John")
.Select(c => new { c.Id, c.LastName })
.GroupBy(c => c.Id)
但是,在我的应用程序中,输入数据将被处理为用户在运行时定义的模型。用户将能够添加和删除属性,因此我无法在代码中定义模型。这将需要手动生成字符串 SQL 查询的想法让我感到恐惧。我希望能够编写这样的代码:
db.Tables["Customers"]
.Where("c.FirstName = :FirstName")
.Select(new[] { "c.Id", "c.LastName" })
.GroupBy("c.Id")
.Param(":FirstName", "John")
(只是示例发明的语法。)
问题:是否有一个 .NET 库可以帮助构建复杂的 SQL 查询,而无需先在代码中定义模型?
PS 看起来像这样的库存在,只是不适用于 .NET。我很想看到 SQLAlchemy、Ruby on Rails ActiveRecord、PHP Yii ActiveRecord、Django 模型等。