2

エンティティ フレームワークでの熱心な読み込みについて質問があります。

ScrappyTemplate と ScarppyTemplateFields の 2 つのテーブルがあり、テーブル間の関係は 1 対多です。両方のテーブルに IsActive フラグがあることに注意してください

IsActive==True の ScrappyTemplate と ScrappyTemplateFields からデータを取得したいのですが、以下のコードを使用して熱心な読み込みでデータを取得します

using (Entities entities = new Entities())
{
var content = entities.ScrappyTemplates.Include(entities.GetTableName<ScrappyTemplateField>   (false)).Where(c => c.ContentSourceId == contentSourceId && c.IsActive == true && c.ScrappyTemplateFields.Any(d=>d.IsActive==true)).ToList<ScrappyTemplate>();
}

Imは結果セットを取得していますが、これは正しくありません!!、IsActive = trueの子テーブル、つまりScrappyTemplateFieldsの結果セットを取得したいのですが、それぞれのIsActiveフラグに関係なくすべての行を返しています。

子テーブルに条件を配置する方法を教えてください。

前もって感謝します

4

1 に答える 1

1

.Include() は、関連するエンティティのフィルタリングを許可しません。これを試して:

    using (Entities entities = new Entities())
        {
        var query = from template in entities.ScrappyTemplates
                      where template.ContentSourceId = contentSourceId && template.IsActive = true && template.ScrappyTemplateFields.Any(d=>d.IsActive==true)
                      select new {
                            Template = template,
                            TemplateFields = template.ScrappyTemplateFields.Where(d=>d.IsActive==true)
                      };
      var content = query.ToList().Select(t=>t.Template);
       }
于 2013-04-28T07:48:57.077 に答える