是否正在使用Linq在存储库外部构建查询,同时仍然可以在数据库中过滤数据而不会将Linq暴露/泄漏到存储库外的实体?显然我可以将lamba表达式构造为Query()方法甚至规范对象的参数,但我希望以某种方式使用Linq来创建有效的即席查询,而不管存储库中使用了什么数据提供程序。
例如:
var myProductID = myRepo.Query()
.Where( p => p.color.Contains("green") )
.Select( p => p.ID.ToString() );
这些概念似乎是相互排斥的。
答案 0 :(得分:2)
但我希望以某种方式使用Linq创建有效的即席查询,无论存储库中使用了哪种数据提供程序。
这个想法注定要失败。请注意,问题在于并非每个lambda表达式都可以被每个LINQ提供程序转换为该提供程序可以处理的内容。这是可怕的“LINQ to Entities无法识别方法......”或其他LINQ提供程序的类似异常消息的来源。有LINQ to SQL可以处理的表达式,但LINQ to Entities不能,反之亦然。在NHibernate中为LINQ提供程序引发类似的问题。
简而言之,暴露LINQy方式来查询存储库是一个漏洞的抽象。避免,避免,避免。