【问题标题】:Linq Not Retrieving Correct Items in a Big TableLinq 没有在大表中检索正确的项目
【发布时间】:2009-07-01 01:02:49
【问题描述】:

我遇到了一个非常奇怪的问题。

我有一个包含超过 800.000 条记录和 2GB mdf 数据库的表。

当我尝试获取最后的记录时:
我只得到一个月前的记录,最后一个没有出现。

Dim Items = From Item In DB.Items _
            Where Item.CatID = CatID _
            Order By Item.PubDate Descending _
            Select Item Take 100

但如果我将 Select 限制为最后一个 ID,那么我会得到预期的结果。

Dim Items = From Item In DB.Items _
            Where Item.CatID = CatID _
            And Item.ID > 600000 _
            Order By Item.PubDate Descending _
            Select Item Take 100

那么,这里发生了什么。
Linq 可以查询的记录有限制吗?

【问题讨论】:

  • 在 SQL 中运行等效查询时会发生什么? Linq2Sql 应该将其转换为类似的东西(或者打开 Linq2Sql 跟踪以获取确切的查询:“SELECT TOP 100 * FROM ItemsTable WHERE CatId = ORDER BY PubDate DESC”查询是否返回您所期望的?另外,只是为了一般聪明,如果这个查询是一个常见的查询,请确保你有一个关于 CatId 和 PubDate (DESC) 的索引。
  • 两种情况下第 100 条记录的发布日期是什么?
  • 也许我应该稍微扩展一下该评论。您描述的这种场景可能是由运行查询的平台上的不同文化和数据库的文化引起的。 (在日期存储为日期而不是数据库中的刻度的情况下)

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


【解决方案1】:

也许这样可以做到:

Dim Items = From Item In DB.Items _
        Where Item.CatID = CatID _
        Order By Item.PubDate _
        Select Item Take 100

由于您是通过Item.PubDate Descending 订购的,因此我删除了Descending,以便您从Item.PubDate 字段的最早记录中获取前100 条记录。

【讨论】:

  • 不,最后几项的 PubDate 最高,所以没有区别。
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多