2009-09-01 118 views

回答

9

LINQ to Entities不允许您访问数据库的每个功能。能够“进入”数据库有时对于高级查询是必需的,无论是首先将它们取消,还是改进LINQ to Entities系统对您的查询做出的有时可怕的选择。

这就是说,我相信LINQ to Entities应该是第一个达成的工具。如果性能成为问题,或者你有更复杂的东西,那么我会把这个问题封装在存储过程中并调用它。现在没有理由将字符串用作查询的基础。

2

ESQL允许您在where子句中选择排序规则,这在LINQ-to-Anything中不受支持。这可能是真正有用的。 ESQL还允许您指定在类型相互继承时返回的精确类型(与LINQ的OfType相反,它返回某种类型和任何子类型的实例)。除此之外,我想不出有什么好的理由来使用它。偶尔能够在字符串中构建查询,但DynamicQuery/Dynamic LINQ在非常罕见的情况下通常足够好,因为这是必要的。我认为(可能玩世不恭)ESQL的“真正”目的是“它早于LINQ”。

关于Godeke修复非最佳查询的要点,我还没有看到一个我无法通过更改LINQ表达式来修复的问题。 ESQL和L2E都以CCT结尾,所以SQL生成管道是相同的。

+0

我关于次最佳查询的观点是我可以在TSQL中做我不能在LINQ to Entities中执行的操作。对于一些示例,请参阅Google上的“参数嗅探实体”(或者,如果您有修复,请告诉我并帮助所有其他需要的人!)我发现可靠的一般解决方法是使用T-SQL以避免嗅探错误。 – Godeke 2009-09-05 19:33:00

+0

T-SQL,是的。 ESQL,不,大部分。问题是LINQ与* E * SQL,而不是* T * -SQL。 – 2009-09-06 01:11:28

+0

解释首字母缩略词请参阅 – alchemical 2010-02-03 19:24:57