【发布时间】:2013-05-08 10:10:16
【问题描述】:
我正在尝试在链接到数据库查询的 IQUEeryable 上运行 Select。它工作正常,但对于所有被选择的属性,它运行一个单独的查询。
我的代码看起来像这样
IQueryable<MyDataSource> data = [Some Complicated Query I've been Building Up];
var results = data.Select(d => new
{
A = d.A,
B = d.B,
C = d.C
}).Take(100).ToArray();
现在,这需要很长时间,尽管实际的查询不会花费那么长时间。 当我在其上运行 SQL 探查器时,我发现它为我选择的每个属性运行不同的 SQL 选择过程 - 对于我返回的每个实体(因此在上面的示例中,还有大约 300 个不同的查询作为执行过滤的实际第一个查询)。
我很确定我在这里做错了什么,这是什么?我期望它运行一个大型查询 - 从数据源中选择正确的列(你知道 Select top 100 d.A, d.B, d.C from [bla bla] ),而不是所有这些混乱。
【问题讨论】:
-
你需要使用
IQueryable<MyDataSource>而不是IEnumerable<MyDataSource>。 -
这些值是否被标记为惰性?另外:我很想看看
[Some Complicated Query I've been Building Up]是如何组合 - 特别是在什么时候它变成IEnumerable<T>而不是IQueryable<T>。data是IQueryable<T>,而不是IEnumerable<T>,这一点非常重要,如果您想让select准确包含引用的 3 个属性。 -
好的,抱歉。它的 IQueryable
感到困惑。固定...
标签: c# linq linq-to-sql