在Select LINQ语句上分配List属性

时间:2014-08-13 10:29:40

标签: c# asp.net-mvc linq

所以我希望实现类似的目标:

 var query = from p in db.Project
                        select new A
                        {
                            Project = p,
                            Capacity = new List<Capacity>((from pp in db.ProjectActualCapacity                                                              
                                                           where pp.ProjectID == p.ID
                                                           select new Capacity
                                                           {
                                                               Actual = pp.Hours,                                                                 
                                                               Date = pp.Date,
                                                               ProjectID = pp.ProjectID
                                                           }
                                                            ).ToList())
                        };

但是,当查询转换为列表时。它抛出以下错误

  

LINQ to Entities中仅支持无参数构造函数和初始值设定项。

有解决方法吗?

感谢

//更新

public class Capacity
{
    public DateTime Date { get; set; }
    public decimal? Actual { get; set; }
    public decimal? Projected { get; set; }
    public int ProjectID { get; set; }
    public decimal Rate { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您正在显式创建列表并使用接受可枚举的构造函数。这不是必需的,因为您已经在使用.ToList()来定义该集合。

此外,您的Capacity类需要一个无参数构造函数。

所以我认为它会像这样工作。

var query = from p in db.Project
    select new A {
        Project = p,
        Capacity = (from pp in db.ProjectActualCapacity                                                              
                    where pp.ProjectID == p.ID
                    select new Capacity {
                        Actual = pp.Hours,                                                                 
                        Date = pp.Date,
                        ProjectID = pp.ProjectID
                    }
                   ).ToList())
   };