我是否应该使用Linq和IQueryable<;T>;实现查询对象模式

我是否应该使用Linq和IQueryable<;T>;实现查询对象模式,linq,entity-framework,architecture,iqueryable,Linq,Entity Framework,Architecture,Iqueryable,假设:在可预见的未来,此解决方案将始终是MS、C#、.Net、SQL Server、实体框架和DAL、BLL等,不会传递给外部源,但可以在同一套件的单独应用程序中使用 我应该使用Linq和IQueryable来实现查询对象模式,而忘记处理存储库和/或DAO吗 B.如果要符合模式,我必须做什么/实施什么?还没有找到太多的例子来说明如何在这一点。我认为您在技术与模式之间遗漏了一些东西。Linq是一种以非常有用的方式处理数据的低级技术。但这不是一种模式,与它没有任何联系 另一方面,如果您想要实现查询对

假设:在可预见的未来,此解决方案将始终是MS、C#、.Net、SQL Server、实体框架和DAL、BLL等,不会传递给外部源,但可以在同一套件的单独应用程序中使用

我应该使用Linq和IQueryable来实现查询对象模式,而忘记处理存储库和/或DAO吗


B.如果要符合模式,我必须做什么/实施什么?还没有找到太多的例子来说明如何在这一点。

我认为您在技术与模式之间遗漏了一些东西。Linq是一种以非常有用的方式处理数据的低级技术。但这不是一种模式,与它没有任何联系

另一方面,如果您想要实现查询对象模式(这是一个非常好的主意,如果您需要实现非常简单的数据查询功能,并且您可以使用倍数方式查询您的数据),那么您可以使用Linq或不使用Linq来实现它。这完全取决于你。linq本身无法帮助您实现查询对象

而且,即使您决定在查询对象的帮助下实现数据访问层,这并不意味着您不需要使用服务或存储库模式。在大多数情况下,尤其是当您使用reach查询功能时,您应该能够同时实现这两种功能,因为很难实现包含您需要的所有方法的服务或存储库

但无论如何,对于复杂的项目,允许用户在您的DAL代码之外使用IQueryable将导致严重的问题。简短示例:您的一些数据发生了更改,现在它包含ID1字段而不是ID字段。如果您有一种查询数据的方法,您只需在一个位置更改代码,但是如果您允许在任何地方都使用IQueryable,那么您需要找到ID使用的所有位置,并将其替换为ID1


而且,如果您的查询功能非常差,那么最重要的是您不需要查询对象或存储库等。活动记录模式将非常可靠

我正在使用的技术概述非常成功。对不起,丹尼尔,我刚才看到你=r链接。坦斯克。应该让我开始吗?谢谢你,你现在用Linq fopr进行查询,对吗?因为在一条评论中,你说这对不同提供者的不同查询结果是不好的。好奇的是,我会使用不同的提供者,但这正是链接答案的要点:您提供的业务代码接口不使用
IQueryable
(LINQ到X)。因此,业务层不存在
IQueryable
所存在的问题。如何在DAL中实现查询是次要的。你可以使用LINQ实现它们,你可以使用NHibernates标准API实现它们,你甚至可以使用普通的SQL实现它们。我在搜索这些模式的信息时从几个不同的帖子/博客中找到了链接。我在这里读到了这篇文章,还有其他一些我想不起来的文章,但这就是我的问题所在。我想知道的是,对于使用IQueryable和Ling-thanking开始使用查询对象模式,是否有一个好的源/示例。我认为最佳答案的作者在他的观点中是非常错误的。他的方法对于纯查询部分的小项目来说是正常的(在我的回答中,我也告诉过你,这将是过度工程化的,但是在大项目中使用他的方法会导致代码重复、复制粘贴、错误和许多其他问题),我刚才也看到了这篇文章,它说Linq是QO模式,仍然在考虑它。。。谢谢,是的。对于某些抽象级别,linq是查询对象实现。但它只连接到低级linq实现,而根本没有连接到DAL。说:伙计们,我在我的应用程序的DAL中使用QO模式是错误的,因为我使用的是linq。我不确定我是否明白你们的意思。我将使用实体框架,并通过tjat查询业务对象,我不会直接去DAL这里也找到了第三个\\仍在考虑它。。。谢谢