【问题标题】:How return distinct records using LINQ如何使用 LINQ 返回不同的记录
【发布时间】:2016-04-13 09:39:24
【问题描述】:

如何在下面获取我的代码以返回不同的记录。课程和课程结构之间的关系是一对多的

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;
}

【问题讨论】:

    标签: c# sql linq lambda


    【解决方案1】:

    在我看来,问题在于您使用了第二个 from 子句 - 您根本没有使用 cs,那么为什么要打扰它呢?它只是引入了重复,因为您要为每个匹配的课程结构选择一个结果。

    我实际上会使用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。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2020-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多