带有字符串列表的LINQ to Entity Framework多对多

本文关键字:Entity Framework to LINQ 字符串 列表 | 更新日期: 2023-09-27 17:58:07

这个问题是以下内容的延续:可以';我想不出能解决这种多对多的查询

这个LINQ查询是由用户@juharr推荐给我的,我只是添加了字符串串联,目的是将名字和姓氏分组为全名。

var courseViews=来自数据库中的c。课程选择新的CourseView(){CourseID=c.ID,ProfessorName=(来自Leturers其中l.Is_Professor选择l.LastName+"+l.FirstName).FirstOrDefault(),AssistantNames=(来自l in c.Leturers哪里l.Is_提供者选择l.LastName+"+l.FirstName).ToList()//hmmm问题};

我使用的ModelView是问题的另一个可能原因:

公开课课程视图{公共int ID{get;set;}公共字符串CourseName{get;set;}公共字符串ProfessorName{get;set;}public List AssistantNames{get;set;}}

嗯,助理名称的字符串列表有问题,不是吗?在我愚蠢的结束时,在视图中,我用@foreach(var s in item.AssistantNames){@s}
循环浏览了这个列表@Ladislav建议使用IQueryable而不是字符串,如何在哪里?

对于我迄今为止所做的解决方案,我得到了以下错误

LINQ to Entities无法识别方法"System.Collections.Generic.List 1[System.String] ToList[String](System.Collections.Generic.IEnumerable 1[System.String])"方法,并且此方法无法转换为存储表达式

需要帮助!

带有字符串列表的LINQ to Entity Framework多对多

删除ToList()调用,然后将Assistants属性更改为:

public IQueryable AssistantNames { get; set; }

查看这是否适用于

var courseViews = from c in db.Courses
                  let assistantsList =  (from l in c.Leturers   
                                        where !l.Is_Professor   
                                        select l.LastName+" "+l.FirstName).ToList()   
                  select new CourseView()  
                  {  
                      CourseID = c.ID,  
                      ProfessorName = (from l in c.Leturers   
                                       where l.Is_Professor   
                                       select l.LastName+" "+l.FirstName).FirstOrDefault(),  
                      AssistantNames =  assistantsList
                  };

另一种方法是,由于您无论如何都要具体化所有课程,将查询分为两部分,第一部分具体化数据,第二部分使用数据创建课程视图(现在是Linq to Objects查询):

var courses = (from c in db.Courses 
               select new { c.ID, Leturers = c.Leturers.ToList() }).ToList();
var courseViews = from c in courses 
                  select new CourseView()  
                  {  
                      CourseID = c.ID,  
                      ProfessorName = (from l in c.Leturers   
                                       where l.Is_Professor   
                                       select l.LastName+" "+l.FirstName).FirstOrDefault(),  
                      AssistantNames = (from l in c.Leturers   
                                        where !l.Is_Professor   
                                        select l.LastName+" "+l.FirstName)
                                        .ToList()  
                  };