带有字符串列表的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])"方法,并且此方法无法转换为存储表达式
需要帮助!
删除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()
};