【问题标题】:Weird Linq to Sql error - retrieving too many fields奇怪的 Linq to Sql 错误 - 检索太多字段
【发布时间】:2009-10-27 14:09:31
【问题描述】:

我有一个非常简单的 Linq to Sql 语句(表面上)工作正常。当我检查它生成的 sql 代码时,它试图检索 all 的表字段,而不是我刚刚请求的字段。这是正常的做法吗?

这是 linq to sql 查询的一些伪代码:-

var result = (from q in db.Foos
              where blah blah blah
              orderby more blah
              select new ResultThingy
              {
                  A = q.A, // int
                  B = q.B, // string
                  C = q.Bar.A // int
                  D = q.Bar.B // string
              })
              .Take(5)
              .ToList();

现在,它正在检索表 Bar ...(以及其他一些字段)中的所有值。

这是正常的做法吗?注意 ResultThingy 类中的每个属性是如何成为简单类型的?

嗯……想法?我真的很困惑。

【问题讨论】:

    标签: .net linq-to-sql


    【解决方案1】:

    这是正常的(仔细查看您的代码后)。

    由于您使用的是 .NET 类型(不是实体),Linq2SQL 必须提取所有内容直到最后一次选择。

    要解决这个问题,请改用匿名对象。

    IOW:select new { q.A, q.B, C = q.Bar.A, D = q.Bar.B }

    【讨论】:

    • 真的吗?唔。太棒了,我会试一试。我可以确认我的 ResultThingy 只是一个 POCO 类而不是 Linq2SQL 实体表/类的东西。我会看看当我改用匿名对象时会发生什么,然后在这里报告。
    • 它将起作用 :) 您的选择被视为可枚举而不是可查询(但在选择之前它是可查询的)。
    • 不 - 仍然试图提取一切 :( 代码更改为 ... select new { ... } 就像你在上面所做的那样。所以我剥离了选择中的所有项目,直到我找到了导致问题的原因。出于兴趣,我还尝试将其剥离,而不是使用匿名对象(如建议的那样),我使用了我的 POCO。实际上(直到我包含了“坏' 导致该实体的所有数据被返回的属性)。嗯,很奇怪 :) 无论如何我都会给你分数 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2010-09-22
    • 1970-01-01
    相关资源
    最近更新 更多