いくつかのテーブルを結合しようとすると、エンティティフレームワークがテーブル全体を返すようです。このテーブルはかなり大きいので、必要な行だけを返す必要があります。エンティティフレームワークがテーブル全体を返すSQLを生成しています
Project - ProjectID, ProjectName
ProjectEmail - ProjectEmailID, ProjectID, EmailID, RemovedFlag, CreatedBy
Email - EmailID, Subject, Body
私は特定のプロジェクトのための電子メールのデータを取得しようとしています:
私は3つのテーブルを持っています。私はこれを行うと :2番目のクエリは、この生成していることを除いて
が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]
メールを大きなテーブルで
は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はこれです私は本当にテーブル全体を引き戻したくありません! メールが正しい場合は、 が正しいキーに結合されるようにリストを返す良い方法はありますか?
ProjectYmailテーブルで最初の または2番目のクエリが表示されないため、どの電子メールが返されるかはわかりません。
作成したテーブル定義、作成したEFクエリ、および生成されたSQLの間に切断があるようです。電子メールテーブルにEmailID、Subject、Bodyが含まれていて、クエリがテーブル全体を返しますが、SQLはEmailIDと未記述のHtmlFlagを超えています。心が明らかに? –
申し訳ありません、Anthony、私は読みやすさのためにすべてを短縮しました。そこにはもっと多くの列があります。私は不必要な列を削除しました。 – Rocklan