.net 奇怪的Linq到Sql错误-检索太多字段
我有一个非常简单的LINQtoSQL语句(表面上)运行良好。当我检查它生成的sql代码时,它试图检索所有表字段,而不是我刚才请求的字段。这是正常的做法吗 以下是linq to sql查询的一些psedo代码:-.net 奇怪的Linq到Sql错误-检索太多字段,.net,linq-to-sql,.net,Linq To Sql,我有一个非常简单的LINQtoSQL语句(表面上)运行良好。当我检查它生成的sql代码时,它试图检索所有表字段,而不是我刚才请求的字段。这是正常的做法吗 以下是linq to sql查询的一些psedo代码:- var result = (from q in db.Foos where blah blah blah orderby more blah select new ResultThingy
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();
现在,它正在从表栏中检索所有值。。。(以及其他一些领域)
这是正常的做法吗?注意ResultThingy类中的每个属性都是一个简单类型吗
嗯。。。思想?我真的对此感到困惑。这是正常的(仔细查看代码之后)
由于您使用的是.NET类型(不是实体),Linq2SQL必须提取所有内容,直到最后一次选择为止
为了避免这种情况,请改用匿名对象
IOW:
选择新的{q.A,q.B,C=q.Bar.A,D=q.Bar.B}
真的吗?嗯,太棒了,我来试试。我可以确认我的ResultThingy只是一个POCO类,而不是Linq2SQL实体表/类。我将看到当我使用匿名对象时会发生什么,并在这里报告。它将起作用:)您的select被视为可枚举而不是可查询(但它是可查询的,取决于select)。不-仍然尝试提取所有内容:(代码更改为…select new{…}就像上面你做的一样。所以我剥离了“选择后退”中的所有项目,直到我找到了导致问题的项目。出于兴趣,我还尝试将其剥离回去,而不是使用匿名对象(如建议的那样),我使用了我的POCO。实际上,这很有效(直到我包含了导致该实体的所有数据都被返回的'bad'属性)。嗯,奇怪:)无论如何,我会给你分数:)