获取Model1的列表,其中包含Model2的列表LINQ - MVC 4 EntityFramework 5

时间:2014-10-10 10:53:47

标签: c# asp.net-mvc linq entity-framework

我有一个要求,我需要使用Linq获取Model1(List)列表,Model1中有Model2(List)列表,我还需要获取它。为此我创建了一个Linq,但是出现了以下错误:

  

LINQ to Entities无法识别该方法   “System.Collections.Generic.List 1 [OurCourse] ToList[OurCourse](System.Collections.Generic.IEnumerable 1   [OurCourse])'方法,这个方法无法翻译成一个   商店表达。

请参阅下面的详细信息:

  1. 我有两个学院和课程表,包括以下栏目: 学院:身份证,姓名,联系方式,城市,地址

    Cource:ID,CollegeID,Name,Years

  2. 我的项目有两种视图模型,如下所示:

    public class OurCollege
    {
        public string Name { get; set; }
    
        public string Contact { get; set; }
    
        public List<OurCourse> MyCourses { get; set; }
    }
    
    public class OurCourse
    {
        public string Name { get; set; }
    
        public int NumberOfYears { get; set; }
    }
    
  3. 这里是我准备的查询查询,但我收到错误:

    var colleges = db.Colleges
                     .Select(cld => new OurCollege()
                      {
                          Name = cld.Name,
                          Contact = cld.Contact,
                          MyCourses = cld.Course
                                         .Select(crs => new OurCourse()
                                         {
                                             Name = crs.Name,
                                             NumberOfYears = crs.Years
                                         }).ToList()
                       }).ToList();
    

2 个答案:

答案 0 :(得分:0)

这样做怎么样:

MyCourses = from crs in cld.Course
            select new OurCourse
            {
               Name = crs.Name,
               NumberOfYears = crs.Years
            }      

现在查看完整的查询:

var colleges = db.Colleges
                 .Select(cld => new OurCollege()
                  {
                      Name = cld.Name,
                      Contact = cld.Contact,
                      MyCourses = (from crs in cld.Course
                                  select new OurCourse
                                  {
                                    Name = crs.Name,
                                    NumberOfYears = crs.Years
                                  }).ToList()    
                   }).ToList();   

实际上 LINQ to Entities 会将您的查询转换为SQL。它不知道如何在 SQL 中翻译ToList()

另一种方法是将您List<T>更改为IEnumerable<T>并删除原始代码ToList()

public IEnumerable<OurCourse> MyCourses { get; set; }

并在查询中:

var colleges = db.Colleges
                 .Select(cld => new OurCollege()
                  {
                      Name = cld.Name,
                      Contact = cld.Contact,
                      MyCourses = cld.Course
                                     .Select(crs => new OurCourse()
                                     {
                                         Name = crs.Name,
                                         NumberOfYears = crs.Years
                                     })
                   }).ToList();

有关详细信息,请访问此Entity Framework ToList() in nested type (LINQ to Entities does not recognize the method)

答案 1 :(得分:0)

foreach循环可以工作,您可以编写类似这样的查询

var colleges =   db.Colleges
                   .Select(x => new OurCollege()
                   {
                        CollegeId = x.CollegeId,
                        Name = x.Name,
                        Contact = x.Contact
                   }).ToList();

foreach (var college in colleges)
{
        college.MyCourse =  db.Course.Where(x => x.CollegeId == college.CollegeId)
                              .Select(x => new OurCourse()
                              {
                                 Name = x.Name,
                                 NumberOfYears = x.Years
                              }).ToList()
}