我的公司刚刚开始使用LINQ,我仍然遇到LINQ命令和SQL的抽象性(如果只是一个字),我的问题是
Dim query = (From o In data.Addresses _
Select o.Name).Count
在上面我的想法中,SQL返回所有行,并且对IQueryable结果中的行数进行计数,所以我会更好用
Dim lstring = Aggregate o In data.Addresses _
Into Count()
或者我在想LINQ的工作方式?在家里使用VB Express,因此我无法看到发送到数据库的实际SQL(我认为),因为我无权访问SQL分析器
答案 0 :(得分:4)
如上所述,它们在功能上是等价的,只使用查询语法。
如我的评论中所述,如果您在LINQPad中将以下内容评估为VB语句:
Dim lstring = Aggregate o In Test _
Into Count()
您可以在生成的SQL输出窗口中获取此信息:
SELECT COUNT(*) AS [value]
FROM [Test] AS [t0]
与评估的以下VB LINQ表达式相同:
(From o In Test_
Select o.Symbol).Count
你得到完全相同的结果。
答案 1 :(得分:2)
我不熟悉Visual Basic,但基于
http://msdn.microsoft.com/en-us/library/bb546138.aspx
这两种方法是相同的。一个使用方法语法,另一个使用查询语法。
您可以通过使用SQL事件探查器确定查询运行情况。
PS - LINQ的“要点”是你可以轻松地进行查询操作而无需离开代码/ VB-land。
答案 2 :(得分:1)
这里重要的一点是,您提供的代码将适用于各种各样的数据源。希望以一种非常有效的方式实现这一目标,尽管这不能得到充分保证。它肯定会以一种有效的方式使用SQL源(转换为SELECT COUNT(*)
SQL查询。如果源是内存中的集合,它将被有效地完成(它被转换为调用{{1如果源是一个不是集合的枚举(在这种情况下它确实读取所有内容并按其计算),那么它并没有非常有效地完成,但在这种情况下确实没有更高效这样做的方式。
在每种情况下,它都以尽可能最有效的方式完成相同的概念操作,而您无需担心细节。没有什么重要的计算,但在更复杂的情况下更大的交易。
在某种程度上,当你说“在我看来,SQL正在返回所有行并且数字行数”时,你是对的。 概念上这是该查询中发生的事情,但实现可能有所不同。与SQL中的实际查询如何与SQL命令的字面解释不匹配进行比较,以便选择最有效的方法。
答案 3 :(得分:0)
我认为你错过了重点,因为带有SQL的Linq具有后期绑定功能,当你需要时就完成了搜索,所以当你说我需要计数时,就会创建一个Query。
在此之前,Linq for SQL创建了表达式树,当您需要它时,它将被“翻译”为SQL ....
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
如何调试见Scott http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx alt text http://www.scottgu.com/blogposts/linqtosql3/step5.jpg