0

是否使用 Linq 在存储库外部构建查询,同时仍然可以过滤数据库中的数据,而无需将 Linq 暴露/泄漏到存储库外部的实体?显然,我可以将 Lamba 表达式构造为 Query() 方法甚至规范对象的参数,但我希望以某种方式使用 Linq 创建高效的即席查询,而不管存储库中使用什么数据提供者。

例如:

var myProductID = myRepo.Query()
                  .Where( p => p.color.Contains("green") )
                  .Select( p => p.ID.ToString() );

这些概念似乎相互排斥。

4

1 回答 1

2

但我希望以某种方式使用 Linq 创建高效的临时查询,而不管存储库中使用什么数据提供程序。

这个想法注定要失败。看,问题是不是每个 lambda 表达式都可以被每个 LINQ 提供程序翻译成该提供程序可以处理的东西。这就是可怕的“LINQ to Entities 无法识别该方法......”或其他 LINQ 提供程序的类似异常消息的来源。LINQ to SQL 可以处理某些表达式,但 LINQ to Entities 不能,反之亦然。为 NHibernate 中的 LINQ 提供程序抛出类似的问题。

简而言之,公开一种 LINQy 方式来通过存储库进行查询是一种泄漏抽象。避免,避免,避免。

于 2012-04-18T01:38:18.560 回答