问题描述
class学生{publicintId{get;set;}publicstring姓名{get;set;}}class上课记录{publicintId{get;set;}publicint学生Id{get;set;}publicstring课程{get;set;}publicDateTime上课时间{get;set;}}学生数据:Id姓名1张三2李四上课记录数据:Id学生Id课程上课时间11语文2014-11-2021数学2014-11-2132数学2014-11-21要求得出最终结果:学生Id学生姓名语文数学1张三2014-11-202014-11-212李四2014-11-21先谢谢各位支招的大大~~~
解决方案
解决方案二:
竖表转横表
解决方案三:
参考我的blog:LINQTOSQL实现行转列
解决方案四:
给出你的测试代码,我可以在你代码基础上给你些具体的思路参考此帖的提问方式:
解决方案五:
引用3楼q107770540的回复:
给出你的测试代码,我可以在你代码基础上给你些具体的思路参考此帖的提问方式:
我实际应用的数据比这个复杂很多,所以这个是我临时模拟出来的,测试数据大概这样子publicclass学生{publicintId{get;set;}publicstring姓名{get;set;}publicList<上课记录>上课记录s{get;set;}}publicclass上课记录{publicintId{get;set;}publicint学生Id{get;set;}public学生所属学生{get;set;}publicstring课程{get;set;}publicstring上课时间{get;set;}}----------------------------------------------------------------------------------------varli学生=newList<学生>(){new学生(){Id=1,姓名="张三",上课记录s=newList<上课记录>(){new上课记录(){Id=1,课程="语文",上课时间="2014-11-20",学生Id=1},new上课记录(){Id=2,课程="数学",上课时间="2014-11-21",学生Id=1}}},new学生(){Id=2,姓名="李四",上课记录s=newList<上课记录>(){new上课记录(){Id=3,课程="数学",上课时间="2014-11-21",学生Id=2}}}};------------------------------------------------------------------------------------------测试代码基本上是这样子了
解决方案六:
voidMain(){varli学生=newList<学生>(){new学生(){Id=1,姓名="张三",上课记录s=newList<上课记录>(){new上课记录(){Id=1,课程="语文",上课时间="2014-11-20",学生Id=1},new上课记录(){Id=2,课程="数学",上课时间="2014-11-21",学生Id=1}}},new学生(){Id=2,姓名="李四",上课记录s=newList<上课记录>(){new上课记录(){Id=3,课程="数学",上课时间="2014-11-21",学生Id=2}}}};varresult=li学生.Select(x=>new{学生Id=x.Id,学生姓名=x.姓名,语文=string.Join(",",x.上课记录s.Where(s=>s.课程=="语文").Select(s=>s.上课时间).ToArray()),数学=string.Join(",",x.上课记录s.Where(s=>s.课程=="数学").Select(s=>s.上课时间).ToArray()),});}publicclass学生{publicintId{get;set;}publicstring姓名{get;set;}publicList<上课记录>上课记录s{get;set;}}publicclass上课记录{publicintId{get;set;}publicint学生Id{get;set;}public学生所属学生{get;set;}publicstring课程{get;set;}publicstring上课时间{get;set;}}
解决方案七:
感谢版主,只是LINQtoEntitiesdoesnotrecognizethemethod'System.StringJoin(System.String,System.String[])'method,andthismethodcannotbetranslatedintoastoreexpression.string.Join能换别的方式吗?
解决方案八:
学习了,多谢。
解决方案九:
对数据进行分组统计查询privateDataTableGetBook(){stringP_Str_ConnectionStr=string.Format(//创建数据库连接字符串@"server=WIN-GI7E47AND9RLS;database=db_TomeTwo;uid=sa;pwd=");stringP_Str_SqlStr=string.Format(//创建SQL查询字符串"SELECT出版社,SUM(金额)as总金额FROMtb_BookGROUPBY出版社");SqlDataAdapterP_SqlDataAdapter=newSqlDataAdapter(//创建数据适配器P_Str_SqlStr,P_Str_ConnectionStr);//codego.net/DataTableP_dt=newDataTable();//创建数据表P_SqlDataAdapter.Fill(P_dt);//填充数据表returnP_dt;//返回数据表}
解决方案十:
取出数据统计结果后的10名数据一、查询数据库数据//查询数据库信息//<returns>方法返回DataTable对象</returns>privateDataTableGetMessage(){stringP_Str_ConnectionStr=string.Format(//创建数据库连接字符串@"server=WIN-GI7E47AND9RLS;database=db_TomeTwo;uid=sa;pwd=");stringP_Str_SqlStr=string.Format(//创建SQL查询字符串"SELECT学生编号,学生姓名,高数,外语,软件工程FROMtb_Grade");SqlDataAdapterP_SqlDataAdapter=newSqlDataAdapter(//创建数据适配器P_Str_SqlStr,P_Str_ConnectionStr);DataTableP_dt=newDataTable();//创建数据表P_SqlDataAdapter.Fill(P_dt);//填充数据表returnP_dt;//返回数据表}//codego.net/二、查询出后的10名学生成绩数据//查询数据库信息//<returns>方法返回DataTable对象</returns>privateDataTableGetStudent(){stringP_Str_ConnectionStr=string.Format(//创建数据库连接字符串@"server=WIN-GI7E47AND9RLS;database=db_TomeTwo;uid=sa;pwd=");stringP_Str_SqlStr=string.Format(//创建SQL查询字符串@"SELECTTop10学生编号,学生姓名,高数,外语,软件工程FROMtb_GradeORDERBY高数+外语+软件工程ASC");SqlDataAdapterP_SqlDataAdapter=newSqlDataAdapter(//创建数据适配器P_Str_SqlStr,P_Str_ConnectionStr);DataTableP_dt=newDataTable();//创建数据表P_SqlDataAdapter.Fill(P_dt);//填充数据表returnP_dt;//返回数据表}