2016-10-10 87 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 - 这是否帮助您解决问题? –