我有一个要求,我需要使用Linq获取Model1(List)列表,Model1中有Model2(List)列表,我还需要获取它。为此我创建了一个Linq,但是出现了以下错误:
LINQ to Entities无法识别该方法 “System.Collections.Generic.List
1 [OurCourse] ToList[OurCourse](System.Collections.Generic.IEnumerable
1 [OurCourse])'方法,这个方法无法翻译成一个 商店表达。
请参阅下面的详细信息:
我有两个学院和课程表,包括以下栏目: 学院:身份证,姓名,联系方式,城市,地址
Cource:ID,CollegeID,Name,Years
我的项目有两种视图模型,如下所示:
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; }
}
这里是我准备的查询查询,但我收到错误:
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();
答案 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()
}