【发布时间】:2009-04-14 12:24:35
【问题描述】:
我有许多不同的数据源需要查询,并且能够将所有查询限制为非常简单的表达式,条件不超过 2 个。我的 Lamba 表达式的典型复杂性示例是:
b => b.user == "joe" && b.domain == "bloggs.com"
在我的非 SQL 数据源上我没问题,因为我可以将它们转换为对象列表并使用 LINQ 查询,例如:
public override T Get(List<T> assets, Expression<Func<T, bool>> whereClause)
{
return assets.Where(a => whereClause.Compile()(a)).FirstOrDefault();
}
我的问题是当我需要查询关系数据库时——我只关心 Postgresql 和 MySQL——我一直在苦苦挣扎。我已经让 nHibernate 到 Linq “工作”,但是遇到了一些问题,它停止并停止访问数据库或无法关闭连接,这是测试版中典型的事情,所以我没有抱怨。
因为我的查询非常简单,而且我很高兴自己构建 SQL,所以我想知道是否有一种相对轻松的方法可以将我的 Expression 转换为 SQL where 子句?
我快速搜索并找到了一些示例,当然已经有一些 Linq-to-SQL 引擎,所以我知道可以做到。问题是我是否可以在一天或更少的努力中完成?这就是我估计我需要找到一个兼容的 Linq-to-SQL 库并对其进行负载测试,假设它工作正常。我确实有很大的性能考虑,所以我更喜欢原始 SQL,而不是通过 ORM 运行。
【问题讨论】:
-
您想构建一个 LINQ 提供程序还是只是将 lambda 转换为 SQL where 子句?
-
我只想构建简单的 where 子句。我不想建立一个 LINQ 提供程序,我知道这是一项严肃的工作。
标签: .net sql linq linq-to-sql lambda