LINQ to SQL - 我什么时候需要选择,何时可以省略Select?

时间:2012-05-30 16:51:58

标签: vb.net linq linq-to-sql

我一直在玩LINQ to SQL,我只有几个简单的问题:

  • 我在查询结束时何时需要选择?
  • 我什么时候可以省略Select?

以下是我的示例查询:

Dim pageRoute = From r In db.PageRoutes Where r.PageId = pageId Order By r.Id Descending

Dim pageRoute = From r In db.PageRoutes Where r.PageId = pageId Order By r.Id Descending

Dim dp = From r In db.DownloadPageOnlineOnlies Where r.PageId = pageId Order By r.Weight Descending, r.Id Ascending

Dim download = (From r In db.Downloads Where r.Id = id).First
  • 其中任何一个在技术上都是错误的吗?
  • 是否可以使用Select或其他内容进行改进?

简而言之,我不明白何时需要:

Select r
Select r.AColumnINeed, r.BColumnINeed (does this improve performance?)

感谢。

P.S。我喜欢在一行上写我的LINQ查询,除非它们真的很大。

3 个答案:

答案 0 :(得分:2)

当且仅当您希望从与where子句匹配的集合中获取完整对象时,linq语句的选择部分才是完全可选的。如果您希望集合中的对象中的单个值是LINQ,那么您需要使用select子句。

我个人总是把select r条款放在最后,只是出于纯习惯,但是当我有选项严格的时候,我遇到了一些与其他人的代码有关的问题,当他们编写LINQ时却没有。如果您决定将来出于select出于某种原因,请暂停option strict on子句会产生多个后期绑定错误。

所以简而言之,你不需要select条款,但是如果你决定转向option strict on,你只会在以后帮助自己。它确实使我的代码在我看来更具可读性。

答案 1 :(得分:1)

让我们有一个包含20列的表格。使用select(2列)和一个WITHOUT进行查询。两者的执行计划可能不同,前一种情况下从数据库服务器传输的数据要少得多。

答案 2 :(得分:-1)

使用select plus是一个很好的做法,如果你有一个请求更精确结果的查询,并且你只需要a或a和b查询,你可以使用select,它会为你的查询保存内存分配,因为它知道你要返回的变量的确切数量。