Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Linq方法中更改MYSQL连接查询_C#_.net Core_Linq To Sql - Fatal编程技术网

C# 如何在Linq方法中更改MYSQL连接查询

C# 如何在Linq方法中更改MYSQL连接查询,c#,.net-core,linq-to-sql,C#,.net Core,Linq To Sql,我编写了一个MySql连接代码,希望从Dotnetcore linq方法中检索相同的值 我的加入代码如下: 选择总账Id作为等级, CRS.名称为CourseName, 总帐名称为GradlevelName, 平均值(ASTSTU.获得的马克) 从等级GL 内部连接课程作为CRS上的CRS.GradeLevelsID=GL.Id UNT.CourseID=CRS.ID上的内部连接单元为UNT 在LSN.UnitsId=UNT.Id上作为LSN的内部联接课程 内部联接分配为AST ON AST.L

我编写了一个MySql连接代码,希望从Dotnetcore linq方法中检索相同的值

我的加入代码如下:

选择总账Id作为等级,
CRS.名称为CourseName,
总帐名称为GradlevelName,
平均值(ASTSTU.获得的马克)
从等级GL
内部连接课程作为CRS上的CRS.GradeLevelsID=GL.Id
UNT.CourseID=CRS.ID上的内部连接单元为UNT
在LSN.UnitsId=UNT.Id上作为LSN的内部联接课程
内部联接分配为AST ON AST.LessonId=LSN.id
在ASTSTU.AssignmentId=AST.id上作为ASTSTU的内部联接赋值学生
其中CRS.SchoolSystemsID=“08d6a1f2-26df-4ad5-25d3-2a26960aa3fd”--学校系统id。
按总账Id分组;
现在我想将上面的MySQL连接更改为Dotnet核心linq方法,以创建一个将要显示的API,我尝试为此编写代码

public async Task<ICollection<GradeLevels>> GetSchoolSystemGradLevelsAverage(Guid schoolSystemId)
{
    List<GradeLevels> dashboadOverAllAverage = new List<GradeLevels>();

    var dashboadOverAllAverage1 = await _GpsContext.GradeLevels
        .Include(d=>d.Departments)
        .ThenInclude(c=>c.Courses.Where(s=>s.SchoolSystemsID ==schoolSystemId))
        .ThenInclude(u=>u.Units)
        .ThenInclude(l=>l.Lessons)
        .ThenInclude(a=>a.Assignment)
        .ThenInclude(a=>a.assignmentStudents)
        .GroupBy(g=>g.ID)
        .ToListAsync();
    return dashboadOverAllAverage;
}
公共异步任务GetSchoolSystemGradLevelsAverage(Guid schoolSystemId)
{
列表Dashboard平均值=新列表();
var dashboadverallaverage1=等待_GpsContext.GradeLevels
.包括(d=>d.部门)
.然后包括(c=>c.Courses.Where(s=>s.SchoolSystemsID==schoolSystemId))
。然后包括(u=>u.单位)
.然后包括(l=>l.课程)
.然后包括(a=>a.赋值)
.然后包括(a=>a.作业学生)
.GroupBy(g=>g.ID)
.ToListAsync();
返回Dashboard平均值;
}
现在我想通过API显示数据,并想调用字段GradeLvels name和Average Marks

[HttpGet()]
public async Task<IActionResult> GetCEOGradeLevelAverage(string schoolSystemId)
{
    var overallgradeAverages = await _ceoDashboadRepository.GetSchoolSystemGradLevelsAverage(Guid.Parse(schoolSystemId));
    List<GetGradeLevelAverageVm> getOverallAverageVms = new List<GetGradeLevelAverageVm>();

    foreach (GradeLevels overallgradeAverage in overallgradeAverages)
    {
        getOverallAverageVms.Add(new GetGradeLevelAverageVm
        {
            Marks = overallgradeAverage.Id.ToString(), //Want to show lable of AvrageMark
            Name = overallgradeAverage.Name //Want to show Gradelevel name
        });
    }
    return Ok(getOverallAverageVms);
}
[HttpGet()]
公共异步任务GetCEOGradeLevelAverage(字符串schoolSystemId)
{
var Overall Grade Averages=await _ceoDashboardepository.GetSchoolSystemGradeLevelSaveRage(Guid.Parse(schoolSystemId));
List getOverallAverageVms=new List();
foreach(总成绩平均值中的总成绩平均值)
{
添加(新的GetGradeLevelAverageVm
{
Marks=overallgradeAverage.Id.ToString(),//要显示AvrageMark的标签吗
Name=overallgradeAverage.Name//要显示成绩级别名称吗
});
}
返回Ok(getOverallAverageVms);
}

您确实从数据库中选择了太多内容。以下是如何选择nessecary值的示例:

using (TestDbContext ctx = new TestDbContext())
{
    var tmp = ctx.AssignmentStudents
        .Include(s => s.Assignment) // Include all Childs..
        .ThenInclude(a => a.Lesson)
        .ThenInclude(l => l.Unit)
        .ThenInclude(u => u.Course)
        .ThenInclude(c => c.GradeLevel)
        .Where(a => a.LessonId == 123)
        .GroupBy(g => // Group by your Key-Values Grade and Course (You could take names instead of ids. Just for simplification)
        new
        {
            GradeLevel = g.Assignment.Lesson.Unit.Course.GradeLevel.Id,
            Course = g.Assignment.Lesson.Unit.Course.Id
        })
        .Select(s => // Select the result into an anonymous type
        new
        {
            GradeLevels = s.Key.GradeLevel, // with same keys like grouping
            Course = s.Key.Course,
            AverageObtainedMarks = s.Average(a => a.ObtainedMarks) // and an average ObtainedMarks from objects matching the key
        })
        .Where(s => s.GradeLevel == 1);

    foreach (var t in tmp)
    {
        Console.WriteLine(t.GradeLevels + " " + t.Course + ": " + t.AverageObtainedMarks);
    }
}
下面是我使用的类和dbcontext:

public class GradeLevel
{
    public int Id { get; set; }
    public List<Course> Courses { get; set; }
}
public class Course
{
    public int Id { get; set; }
    public int GradeLevelId { get; set; }
    public GradeLevel GradeLevel { get; set; }
    public List<Unit> Units { get; set; }
}
public class Unit
{
    public int Id { get; set; }
    public int CourseId { get; set; }
    public Course Course { get; set; }
    public List<Lesson> Lessons { get; set; }
}
public class Lesson
{
    public int Id { get; set; }
    public int UnitId { get; set; }
    public Unit Unit { get; set; }
    public List<Assignment> Assignments { get; set; }
}
public class Assignment
{
    public int Id { get; set; }
    public int LessonId { get; set; }
    public Lesson Lesson { get; set; }
    public List<AssignmentStudent> AssignmentStudents { get; set; }

}
public class AssignmentStudent
{
    public int Id { get; set; }
    public int AssignmentId { get; set; }
    public Assignment Assignment { get; set; }
    public decimal ObtainedMarks { get; set; }
}

public class TestDbContext : DbContext
{
    public DbSet<AssignmentStudent> AssignmentStudents { get; set; }
    public DbSet<Assignment> Assignments { get; set; }
    public DbSet<Lesson> Lessons { get; set; }
    public DbSet<Unit> Units { get; set; }
    public DbSet<Course> Courses { get; set; }
    public DbSet<GradeLevel> GradeLevels { get; set; }
}
公共班级等级
{
公共int Id{get;set;}
公共列表课程{get;set;}
}
公共课
{
公共int Id{get;set;}
public int GradeLevelId{get;set;}
公共级别{get;set;}
公共列表单元{get;set;}
}
公营课组
{
公共int Id{get;set;}
public int CourseId{get;set;}
公共课程{get;set;}
公共列表课程{get;set;}
}
公共课
{
公共int Id{get;set;}
public int UnitId{get;set;}
公共单位单位{get;set;}
公共列表分配{get;set;}
}
公共课堂作业
{
公共int Id{get;set;}
公共int LessonId{get;set;}
公共课程{get;set;}
公共列表分配学生{get;set;}
}
公共班级分配学生
{
公共int Id{get;set;}
public int AssignmentId{get;set;}
公共赋值{get;set;}
公共十进制获得标记{get;set;}
}
公共类TestDbContext:DbContext
{
公共DbSet赋值学生{get;set;}
公共数据库集分配{get;set;}
公共数据库集课程{get;set;}
公共数据库集单元{get;set;}
公共数据库集课程{get;set;}
公共数据库集级别{get;set;}
}

我已经有了相同的dbcontext,我所做的是让Join(在mysql中)检索数据,我想将所有的Join in Linq方法转换为在dotnet core中创建API。dbcontext和数据类用于测试。上面的示例显示了如何联接表(包括属性)m将它们正确分组并选择所需的字段。如何在给定示例中添加where条件,就像在联接中提到的一样,“SchoolSystemId”将是课程表中的字段。@VipinJha where where where you want。分组之前或之后。我确实在示例中添加了两个
Where
-条件。