Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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执行查询,该LINQ必须使一列不同,但包含另一列的所有信息_C#_Sql_Database_Linq - Fatal编程技术网

C# 如何使用LINQ执行查询,该LINQ必须使一列不同,但包含另一列的所有信息

C# 如何使用LINQ执行查询,该LINQ必须使一列不同,但包含另一列的所有信息,c#,sql,database,linq,C#,Sql,Database,Linq,我目前正在为班级做一项作业,该作业涉及使用LINQ从充满以下内容的数据库中获取信息: …学生姓名..班级..平均成绩..课程..课程编号..最终成绩..CSCIGPA.. …D,卡拉。。。3.8…|…CSCI4220…|…4220…|…A…|…3.9… …D,卡拉…SR…3.8…CSCI 3110…3110…A…3.9… R,Cisco JR,3.1,CSCI3010,3030,B,3.4,… …R,Cisco…JR…3.1…CSCI2070…2070…C…3.4… R,Cisco JR,3.1

我目前正在为班级做一项作业,该作业涉及使用LINQ从充满以下内容的数据库中获取信息:

…学生姓名..班级..平均成绩..课程..课程编号..最终成绩..CSCIGPA..
…D,卡拉。。。3.8…|…CSCI4220…|…4220…|…A…|…3.9…
…D,卡拉…SR…3.8…CSCI 3110…3110…A…3.9…
R,Cisco JR,3.1,CSCI3010,3030,B,3.4,…
…R,Cisco…JR…3.1…CSCI2070…2070…C…3.4…
R,Cisco JR,3.1,CSCI3030,3030,B,3.4,…
…A,巴里…FR…4.0…CSCI 1010…1010…A…4.0…
…A,巴里……FR……4.0……CSCI 2010……2010……A……4.0…
…Q,Oliver…所以…2.7…CSCI2020…2010…C…2.8…
…Q,Oliver…所以…2.7…CSCI2020…2010…C…2.8…
“Q,奥利弗……”所以….2.7….CSCI 2030….2030….C….2.8….
…H,Roy……所以……3.8……CSCI 2020……2020……A……3.7

我没有包括所有的列,但这是一个很好的示例。根据这个输入,查询应该返回每个班级(FR、SO、JR、Senior)的学生列表,按GPA排序(从大到小),然后按CSCIGPA排序(从大到小)。此外,要显示的每个学生都应该有一个串联的“课程”和“最终课程”,并且每个连接的课程和最终成绩也应包括在列表中。例如,显示“A,Barry”的记录将是:

“A,巴里”,FR,4.0,CSCI1010A,CSCI2010A,4.0

注:CourseNumber列中的单个课程编号“1010和2010”不属于输出的一部分

我最大的问题是弄清楚如何将相关课程和最终成绩纳入单个学生的行列(当我做DISTINCE()时,除了第一个课程和成绩外,所有不同的课程和成绩都取消了)。这是我写的一些代码,但我承认它不是很好,可能对这个问题没有帮助,因为我已经描述过了

//迭代学生表中所有学生的方法
公共IEnumerable GetAllStudents(){
var myquery=databaseEDM.Students
.OrderBy(x=>x.Class)。然后按降序(x=>x.GPA)。然后按降序(x=>x.CSCIGPA)
.ToList().Distinct();
返回myquery;
}

在本次作业之前,我从未真正做过任何关于数据库或查询的工作,因此非常感谢您的帮助。如果我需要提供更多信息以获得正确答案,请告诉我。谢谢


其他注意事项:这只是一个简单的控制台应用程序,它从数据库获取信息以进行输出。

您的代码需要一个学生类,而代码中没有学生类。在下面的代码中,我希望结果出现在datatabe中(您可以从dataadapter获得)

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“StudentName”,typeof(string));
添加(“类”,类型(字符串));
添加(“GPA”,类型(十进制));
添加(“课程”,类型(字符串));
添加(“CourseNumber”,typeof(int));
添加(“最终等级”,类型(字符串));
添加(“CSCIGPA”,类型(十进制));
添加(新对象[]{“D,Kara”,“SR”,3.8,“CSCI4220”,4220,“A”,3.9});
添加(新对象[]{“D,Kara”,“SR”,3.8,“CSCI3110”,3110,“A”,3.9});
添加(新对象[]{“R,Cisco”,“JR”,3.1,“CSCI3010”,3030,“B”,3.4});
添加(新对象[]{“R,Cisco”,“JR”,3.1,“CSCI2070”,2070,“C”,3.4});
添加(新对象[]{“R,Cisco”,“JR”,3.1,“CSCI3030”,3030,“B”,3.4});
添加(新对象[]{“A,Barry”,“FR”,4.0,“CSCI1010”,1010,“A”,4.0});
添加(新对象[]{“A,Barry”,“FR”,4.0,“CSCI2010”,2010,“A”,4.0});
添加(新对象[]{“Q,Oliver”,“SO”,2.7,“CSCI2020”,2010,“C”,2.8});
添加(新对象[]{“Q,Oliver”,“SO”,2.7,“CSCI2020”,2010,“C”,2.8});
添加(新对象[]{“Q,Oliver”,“SO”,2.7,“CSCI2030”,2030,“C”,2.8});
添加(新对象[]{“H,Roy”,“SO”,3.8,“CSCI2020”,2020,“A”,3.7});
var myquery=dt.AsEnumerable()
.OrderBy(x=>x.Field(“类”))。然后按降序排列(x=>x.Field(“GPA”))。然后按降序排列(x=>x.Field(“CSCIGPA”))。ToList();
}
}
}

以下是您的工作示例:

        public IEnumerable<Student> GetAllStudents()
        {
            var myquery = databaseEDM.Students
                .GroupBy(x => new { x.StudentName, x.Class })
                .Select(s => new
                {
                    StudentName = s.Key.StudentName,
                    Class = s.Key.Class,
                    GPA = s.Average(g => g.GPA),
                    Courses = string.Join(" ", s.Select(c => c.Course + c.FinalGrade)),
                    CSCIGPA = s.Average(cs => cs.CSCIGPA)
                })
                .OrderBy(x => x.Class)
                .ThenByDescending(x => x.GPA)
                .ThenByDescending(x => x.CSCIGPA)
                .ToList()
                .Distinct();
            return myquery;
        }
public IEnumerable GetAllStudents()
{
var myquery=databaseEDM.Students
.GroupBy(x=>new{x.StudentName,x.Class})
。选择(s=>new
{
StudentName=s.Key.StudentName,
Class=s.Key.Class,
GPA=s.Average(g=>g.GPA),
Courses=string.Join(“,s.Select(c=>c.Course+c.FinalGrade)),
CSCIGPA=s.Average(cs=>cs.CSCIGPA)
})
.订购人(x)
        public IEnumerable<Student> GetAllStudents()
        {
            var myquery = databaseEDM.Students
                .GroupBy(x => new { x.StudentName, x.Class })
                .Select(s => new
                {
                    StudentName = s.Key.StudentName,
                    Class = s.Key.Class,
                    GPA = s.Average(g => g.GPA),
                    Courses = string.Join(" ", s.Select(c => c.Course + c.FinalGrade)),
                    CSCIGPA = s.Average(cs => cs.CSCIGPA)
                })
                .OrderBy(x => x.Class)
                .ThenByDescending(x => x.GPA)
                .ThenByDescending(x => x.CSCIGPA)
                .ToList()
                .Distinct();
            return myquery;
        }