首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从实体框架中的视图中进行选择

从实体框架中的视图中进行选择
EN

Stack Overflow用户
提问于 2017-05-23 20:34:07
回答 2查看 2.8K关注 0票数 0

我试图用直接的方式从视图中选择一些列,如下面的代码片段

代码语言:javascript
复制
var q = new TDSViewConnection();
var trials = q.progressive_filtering_lookup_decoded_v
              .Where(z => z.source == "") 
              .Select(z => z.trial_id);

为上述表达式生成的SQL语句如下所示

代码语言:javascript
复制
SELECT 
    [Extent1].[trial_id] AS [trial_id]
FROM 
    (SELECT 
         [progressive_filtering_lookup_decoded_v].[master_protocol_id] AS [master_protocol_id], 
         [progressive_filtering_lookup_decoded_v].[trial_id] AS [trial_id], 
         [progressive_filtering_lookup_decoded_v].[source] AS [source], 
         [progressive_filtering_lookup_decoded_v].[discipline_code] AS [discipline_code], 
         [progressive_filtering_lookup_decoded_v].[crop_team_code] AS [crop_team_code], 
         [progressive_filtering_lookup_decoded_v].[crop_name] AS [crop_name], 
         [progressive_filtering_lookup_decoded_v].[pest_name] AS [pest_name], 
         [progressive_filtering_lookup_decoded_v].[country_code] AS [country_code], 
         [progressive_filtering_lookup_decoded_v].[year] AS [year]
     FROM 
         [dbo].[progressive_filtering_lookup_decoded_v] AS [progressive_filtering_lookup_decoded_v]) AS [Extent1]
WHERE 
    N'' = [Extent1].[source]

问题是为什么有两个select语句?我认为应该只发表一项声明。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-23 21:22:55

使用实体框架,您将在LINQ语句所表达的内容的掩护下获得SQL生成。在我看来,LINQ语句是根据代码的初步部分执行它的第一个选择,然后当您再次使用'.Select‘关键字时,实际上是在对先前检索的结果集执行子查询。

换句话说:var trials = q.progressive_filtering_lookup_decoded_v.Where(z => z.source == "")是初始查询,它将返回一个结果集。

然后运行.Select(z => z.trial_id);,它使用第一个结果集作为起点运行一个单独的查询。

这就是在生成的SQL中看到两个select语句的原因。

票数 0
EN

Stack Overflow用户

发布于 2017-05-24 05:19:21

正如其他用户所发布的那样,您的结果查询是一个投影结果,或者是整个查询的子集。因此,查询引擎将把完整的对象作为源,并简单地从其中选择您想要的项,从而产生子查询。

如果您查看SQL Server中的查询计划性能,那么运行该查询的方式与EF进行查询的方式和您可能期望看到的查询方式之间通常没有真正的区别。

这里的主要好处是,由于您只需要一个列,EF确保从数据库返回的全部内容。通常,我发现确保您的结果集最小是所需的函数。随着更复杂的预测,这一点变得更加明显。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44144495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档