Joh*_*ers 16
其他答案暗示了这一点,但这里明确指出:
术语"LINQ"可以指L anguage IN tegrated Q uery的整套技术.这些技术允许将LINQ查询转换为表达式树.该树可以在以后由"LINQ Provider"执行.
LINQ Provider查看表达式树并将其转换为例如SQL语句,XML DOM导航或通过对象图导航.这些提供程序的名称类似于"LINQ to SQL","LINQ to Entities","LINQ to Objects"等.
可能有理由不使用特定提供商.
许多LINQ提供商都提供额外的工具(有人会说,"行李").这个工具有助于提供一些关于LINQ的最常见的"利弊".
特别是,LINQ to SQL提供了与数据库模式的直接一对一映射.每个LINQ类对应一个数据库表.如果数据库的结构发生变化,那么代码也会发生变化.通过使用视图可以在一定程度上减轻这种情况.
我相信LINQ to SQL仅限于Microsoft SQL Server.此外,微软已经表示LINQ to SQL不会成为未来的优先投资.
LINQ to Entities是ADO.NET实体框架(EF)的一部分.EF提供了更抽象的概念级别的实体建模.例如,您可能有一个Person实体从两个具有一对一映射的表中获取数据.访问此实体的代码无需关心如何在数据库中分析表.
我相信LINQ to Entities适用于许多ADO.NET提供程序,而不仅仅是SQL Server.此外,这也是微软表示将继续投资的地方.
在LINQ到"某个数据库"的这两种情况下,经验丰富的SQL开发人员和/或DBA几乎总是能够编写比LINQ生成的查询更好的查询.如果性能是最高要求,我相信LINQ to Entities可以将存储过程映射到实体上的方法.
这些LINQ提供程序的最大好处是,当您在性能不是首要任务的环境中工作时,您不需要经验丰富的SQL开发人员或DBA.这使他们解放出来以优化实际需要他们专业知识的查询.
不直接使用这些的另一个原因是,如果您有安全注意事项,则会阻止您的用户对数据库表具有SELECT权限.在这种情况下,请使用视图或存储过程.