8
|
Sedat Kapanoglu johnnywhoop · 技术社区 · 15 年前 |
1
8
好的,这是我在对反射镜输出进行一段时间后的发现。Linq to对象组合连续
当你使用
但是,当您使用连续的where子句时,会有轻微的性能损失,至少从非抖动的il方面来说是这样。下面是代码组合后的外观:
如您所见,这涉及到额外的函数调用开销。这可能非常昂贵,除非JIT引入函数。我相信它在这方面做得很好,但是我们现在知道,如果我们自己结合我们的where语句,JIT的工作会变得容易得多,除非必要。 但在SQL方面,查询是相同的。即使在执行之前,调试器也会将查询对象计算为同一个SQL语句。在Linq名称空间中我不能走得太远,因为事情看起来更复杂,但是由于查询是相同的,所以不应该像上面的Linq to对象示例那样受到惩罚。 编辑:我看到过一些实例,其中多个WHERE语句会导致SQL Server上的嵌套子查询。我认为最好还是坚持单一的where语句,只要你能安全的话。 |
2
3
在这里做正确的事情取决于Linq to SQL。我希望它将两个“where”子句转换为一个SQL子句,两个部分用“and”连接在一起。 两者都试一下-但我非常怀疑您是否会看到生成的SQL中有任何不同。 在我看来,对于任何重要的事情,您都应该查看生成的SQL,但是LINQ的工作方式是肯定的。 鼓励 您可以用小子句组成一个大查询,所以我真的希望它能正常工作。 |
3
2
DB侧,它们是相同的。这只是LinqToSQL可组合的副作用(即,您可以从一个查询开始,然后向其添加其他条件、更改投影等)。 |
4
2
代码:
或
对C来说是句法上的糖分。它将编译为
正如你所猜测的那样,我 真的? 怀疑生成的SQL中是否存在任何差异。尝试使用像JetBrains的Resharper这样的工具-它甚至提供了IntelliSense,让您可以选择在两者之间自动转换,以节省重新编写测试的时间。 我的偏好是将真正简单的查询编写为方法链(例如,只涉及一个集合/表,没有连接)以及在更具表现力的LinqSugar语法中更复杂的任何查询。 |
Imad · Linq扩展方法没有使用Object类的Equals 1 年前 |
user8512043 · 根据每个元素中的数字对列表进行排序 2 年前 |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
Drago · Linq通过比较Id和具有Id的对象列表来查询获取列表 2 年前 |