LINQ to Entity Framework 多对多与字符串列表
Posted
技术标签:
【中文标题】LINQ to Entity Framework 多对多与字符串列表【英文标题】:LINQ to Entity Framework many to many with list of strings 【发布时间】:2011-09-04 12:24:43 【问题描述】:这个问题是从以下继续: Can't think of query that solves this many to many
这个 LINQ 查询是用户 @juharr 推荐给我的,我只是添加了字符串连接,目的是将名字和姓氏组合成全名。
var courseViews = from c in db.Courses 选择新的 CourseView() CourseID = c.ID, ProfessorName =(来自 c.Leturers 中的 l l.Is_Professor 在哪里 选择 l.LastName+" "+l.FirstName).FirstOrDefault(), AssistantNames =(来自 c.Leturers 中的 l 在哪里!l.Is_Professor 选择 l.LastName+" "+l.FirstName) .ToList() //hmmm 问题 ;我使用的 ModelView 是另一个可能的问题原因:
公开课 CourseView 公共 int ID 获取;放; 公共字符串 CourseName 获取;放; 公共字符串教授姓名得到;放; 公共列表 AssistantNames get;放;嗯,助手名称的字符串列表有问题不是吗?
在我的愚蠢结束时,在 View 中,我用@foreach(var s in item.AssistantNames)@s
循环浏览了这个列表
@Ladislav 建议使用 IQueryable
而不是字符串,如何在哪里?
对于我到目前为止所做的解决方案,我得到以下 错误:
LINQ to Entities 无法识别方法 'System.Collections.Generic.List1[System.String] ToList[String](System.Collections.Generic.IEnumerable
1[System.String])' 方法,并且此方法无法转换为存储表达式。
需要帮助!
【问题讨论】:
public List AssistantNames get; set;
可能是public List<string> AssistantNames get; set;
【参考方案1】:
删除 ToList()
调用,然后将 Assistants 属性更改为:
public IQueryable AssistantNames get; set;
【讨论】:
【参考方案2】:看看这是否有效
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
;
【讨论】:
【参考方案3】:另一种方法是,因为无论如何您都在具体化所有课程以将查询分成两部分,第一个具体化数据,第二个使用它来创建课程视图(这现在是 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()
;
【讨论】:
以上是关于LINQ to Entity Framework 多对多与字符串列表的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to Entity Framework 多对多与字符串列表
AD0.NET Entity Framework 4.0 或 Linq-to-SQL
linq to sql、Entity Framework 和 NHibernate 的性能如何?
使用内置 Linq to SQL 驱动程序在 LinqPad 中运行 Entity Framework Core 查询的更简单方法?