如何让下面的代码返回不同的记录。类(class)和类(class)结构之间的关系是一对多的关系
public IQueryable<object> GetCoursesDetails()
{
var query = (from c in db.Courses
from cs in db.CoursesStructures.Where(cs => cs.CourseID == c.CourseID).DefaultIfEmpty()
select new
{
CourseID = c.CourseID,
CourseName = c.CourseName,
CoursesStructures = db.CoursesStructures.Select(x => new
{
CourseStructureID = x.CourseStructureID,
CourseID = x.CourseID,
StructureName = x.StructureName
}).Where(k => k.CourseID == c.CourseID)
});
return query;
}
最佳答案
在我看来,问题在于您对第二个 from
子句的使用 - 您根本没有使用 cs
,那么为什么要费心呢?它只是引入了重复,因为您要为每个匹配的类(class)结构选择一个结果。
我实际上会使用 join ... into
子句,然后在 select
中使用结果:
var query = from c in db.Courses
join cs in db.CoursesStrutures
on c.CourseID equals cs.CourseID
into structures
select new
{
c.CourseID,
c.CourseName,
CoursesStructures = structures.Select(x => new
{
x.CourseStructureID,
x.StructureName
}
};
(我已经从嵌套匿名类型中删除了 CourseID
,因为它显然将与外部类型相同......我还使用了投影初始值设定项 来简化代码 - 您可以在匿名类型初始值设定项中将 Foo = x.Foo
缩短为 x.Foo
。)
关于c# - 如何使用 LINQ 返回不同的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594433/