qazxsw poi是一个从linq创建sql查询的开源项目。我正在使用它与Sqlinq,但不幸的是它不支持JOIN。
是否还有其他库可以执行相同的操作并支持JOIN?
如果没有,什么可以是一个避免硬编码SQL选择查询的解决方案?
.NET附带的内置linq怎么样?
我想您可能想重新考虑一下您想要使用哪些技术以及为什么要使用这些技术。你写了:
有没有办法将linq转换为sql查询
答案是肯定的,它被称为http://msdn.microsoft.com/en-us/library/bb397927.aspx。有ORM可供选择。
Dapper是一种微型ORM。虽然它非常好而且我个人经常使用它,看起来它对你的工作来说是错误的工具。它不会为您编写SQL查询。
但其他解决方案呢。例如,microsoft提供many libraries和Linq to SQL作为开箱即用的解决方案。您可能想要检查这些。
Relinq有一个Reqlinq.SqlBackend,你可以适应支持Dapper我想,我正在尝试自己的工作,但没有太多时间在我的手上工作
Linqer是一个SQL到LINQ转换器工具:https://github.com/re-motion/Relinq-SqlBackend
当你说你不想“硬编码SQL”时,问题是SQL还是硬编码?由于SQL非常棒,富有表现力,功能强大,而且在任何情况下都是关系数据库的语言,我敢肯定这就是那些困扰你的硬编码。所以,QueryFirst。您的sql在您的应用程序中与主机语言具有相同的状态共存:语法在您键入时验证,可直接在原位执行。每次保存.sql时,QueryFirst都会重新生成其C#包装器:repo,其接口和结果的POCO。从开发到部署不断测试您的查询。理论上,数据访问没有运行时错误。
讨论和评论的小博客here
免责声明:我写过QueryFirst
我使用SqlLinq在Dapper中查询,我发现它们带有另一个名为here的适配器。没有太多关于它的信息,但采取这个例子肯定有帮助。这不是很好,但至少它是一些东西。
SQLinq.Dynamic.DynamicSQLinq
你可能需要看看这个Github:new DynamicSQLinq("TBL_PRODUCT")
.Join("TBL_PRODUCTTYPE", "TBL_PRODUCTTYPE.ID = TBL_PRODUCT.ID_PRODUCTTYPE")
.Where("TBL_PRODUCT.ID = @0", 254)
.ToSQL();
使用此库,您可以编写如下查询:
https://github.com/andygjp/ExpressionToSql
哪个会产生这样的查询:
var query = Sql
.Select((Address x) => new { x.Id, x.Postcode })
.Where(x => x.Id > 10 && x.Postcode != postcode);