2016-10-10 10 views
1

EFエンティティのLinq投影では、必要なプロパティのみを選択できます。Entity FrameworkのLinqネストされた投影

以下のコードでは、ex。今質問にはオプションとしてナビゲーションプロパティがあります。 は私が

options.ToList() 

を記述する場合、それはすべてのプロパティで動作します

ネストされたプロパティとしてのみオプションIDとオプションのタイトルを選択します。

私はOptionsがコレクションであることを理解し、私は唯一のOptions.IDOptions.Title

var query = from c in context.Sec_Questions.AsNoTracking() 
      where c.IsActive == true 
      select new 
        { c.ID, c.QuestionType, 
        c.Title, c.ControlName, 
        c.IsNumberOnly, 
        c.Maxlenghth, 
        options = c.Options.ToList(), 
        c.IsMultiple, 
        c.ControlID, 
        c.HelpText, 
        c.IsRequired }; 
var questions = query.ToList(); 

を含めることにしたい。しかし、このコードは、このc.Options.ToList()から

var query = from c in context.Sec_Questions.AsNoTracking() 
      where c.IsActive == true 
      select new 
        { c.ID, c.QuestionType, 
        c.Title, c.ControlName, 
        c.IsNumberOnly, 
        c.Maxlenghth, 
        options = new { c.Options.ID, c.options.Title }, 
        c.IsMultiple, 
        c.ControlID, 
        c.HelpText, 
        c.IsRequired }; 
var questions = query.ToList(); 
+0

オプションを使用すると、特定のインスタンス –

+0

を選択すると、リストから直接プロパティvauleを取得することはできませんリスト型の場合FirstOrdefaultを使用しよう:だから何をやるべきことだけで、これらの2つのプロパティを含む新しいオブジェクトを投影する.Selectを使用していますオプションがリストオブジェクトであるのはなぜですか?それは必要ですか?リストオブジェクトがある場合、配列内の1つの項目だけを選択してプロパティを取得する必要があります。私は通常、FirstOrDefault:options = new {c.Options.FirstOrDefault()。ID、c.optionsFirstOrDefault()。Title}、 – jdweng

答えて

2

を動作しません。

var query = from c in context.Sec_Questions 
      where c.IsActive == true 
      select new { 
       c.ID, 
       c.QuestionType, 
       c.Title, 
       c.ControlName, 
       c.IsNumberOnly, 
       c.Maxlenghth, 
       Options = c.Options.Select(o => new { o.ID, o.Title }), 
       c.IsMultiple, 
       c.ControlID, 
       c.HelpText, 
       c.IsRequired }; 
+0

@ user3815413を使用します。 –

関連する問題