繁体   English   中英

实体框架正在生成返回整个表的SQL

[英]Entity framework is generating SQL that returns the entire table

当我尝试加入一些表时,实体框架似乎正在返回整个表。 由于此表很大,因此我只需要返回所需的行即可。

我有三个表:

Project       - ProjectID, ProjectName
ProjectEmail  - ProjectEmailID, ProjectID, EmailID, RemovedFlag, CreatedBy
Email         - EmailID, Subject, Body 

我正在尝试检索特定项目的电子邮件数据。 当我这样做时:

using (DatabaseEntities context = new DatabaseEntities())
{
    Project proj = context.Projects.Where(p => p.ProjectID == ProjectID).FirstOrDefault();
    if (proj != null)
    {
        List<Email> projectEmails = (from pe in proj.ProjectEmails
                                     join e in context.Emails on pe.EmailID equals e.EmailID
                                     select e).ToList();
    }

}

生成的SQL是这样的:

exec sp_executesql N'SELECT TOP (1) 
[Extent1].[ProjectID] AS [ProjectID], 
[Extent1].[ProjectName] AS [ProjectName],
    -- rest of columns appear here 
FROM [dbo].[Project] AS [Extent1]
WHERE [Extent1].[ProjectID] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=6

非常好,除了第二个查询会生成以下内容:

SELECT  [Extent1].[EmailID] AS [EmailID], 
    [Extent1].[Subject] AS [Subject],
            -- rest of columns appear here
FROM [dbo].[Email] AS [Extent1]

电子邮件是一张大桌子,我真的不想撤回整个桌子! 如果有电子邮件,是否有更好的方法返回列表,以便表连接到正确的键?

我也很困惑它如何知道要返回的电子邮件,因为在ProjectEmail表上看不到第一个或第二个查询。

您错过了查询中的where条件。

List<Email> projectEmails = (from pe in proj.ProjectEmails
                             join e in context.Emails on pe.EmailID equals e.EmailID
                             where pe.ProjectID == proj.ProjectID
                             select e).ToList();

编辑

from pe in proj.ProjectEmails中使用from pe in proj.ProjectEmails其中proj.ProjectEmails是IEnumerable类型。 因此,此LINQ查询成为LINQ-to-objects查询。 这就是为什么它在context.Emails加载所有电子邮件的原因。 尝试

List<Email> projectEmails = (from pe in context.ProjectEmails
                            join e in context.Emails on pe.EmailID equals e.EmailID
                            where pe.ProjectID == proj.ProjectID
                            select e).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM