2016-10-10 85 views
1

在EF實體的Linq投影中,我只能選擇所需的屬性。實體框架中的Linq嵌套投影

在下面的代碼中出現問題。現在問題有導航屬性作爲選項。 我要選擇唯一的選擇ID和選項標題嵌套屬性

如果我寫

options.ToList() 

它會與所有屬性的作用。

我只想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(); 

但這代碼不起作用

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

嘗試使用FirstOrdefault如果選項是列表類型你不能從列表中直接獲取屬性vaule與選擇特定實例 –

+0

爲什麼選項是一個列表對象?它需要成爲?當你有一個列表對象時,你只需要選擇數組中的一個項目來獲取屬性。我通常使用FirstOrDefault:options = new {c.Options.FirstOrDefault()。ID,c.optionsFirstOrDefault()。Title}, – jdweng

回答

2

從這個c.Options.ToList()我明白Options是一個集合。所以,你應該做的是使用.Select項目只包含這兩個屬性的新對象:

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 - 這是否幫助您解決問題? –