【发布时间】:2016-11-18 16:46:48
【问题描述】:
我有两个共享一个公共字段的列表。但是,我想加入公共字段上的列表,其中一个列表来自 SQL 动态数据透视表,因此该列表中的所有列名(链接字段除外)都具有未知的列名。我的问题是如何找到这些列名以便创建新列表?
示例
class Student
{
int StudentID {get; set;}
string FirstName {get; set;}
string LastName {get; set;}
}
studentCollection 是学生的集合
我在这里以class ReportRanking 为例。它是一个dynamic 类,它从使用动态数据透视的存储过程返回。所以我不提前知道列名。我使用TestScore-1、TestScore-2 等作为占位符来显示返回的内容。列名将包含学生参加的测试的名称。列中的值将是他们收到的分数。
class StudentTestScores
{
int StudentID {get; set;}
int TestScore-1 {get; set;}
int TestScore-2 {get; set;}
int TestScore-3 {get; set;}
...
}
testResultCollection 是 StudentScores 的集合。
+-----------+---------+----------+----------+---------+
| StudentId | History | Algebra | Geometry | Biology |
+-----------+---------+----------+----------+---------+
| 1 | 88 | 96 | 87 | 91 |
+-----------+---------+----------+----------+---------+
| 2 | 92 | 75 | 88 | 74 |
+-----------+---------+----------+----------+---------+
因为结果来自动态数据,所以在编译时我不知道 StudentTestScores 中的列名称是什么。它们代表学生参加的考试的名称。如何引用列名以便将列表组合成一个新的复合列表?
var testResults = from student in studentCollection
join testResult in testResultCollection
on student.StudentId equals testResult.StudentId
select new {
student.StudentId,
student.FirstName,
student.LastName,
testResult.XXXXXXX // Not sure how to reference the test scores
...
}
这就是我最终需要的......
+-----------+-----------+----------+---------+---------+----------+---------+
| StudentId | FirstName | LastName | History | Algebra | Geometry | Biology |
+-----------+-----------+----------+---------+---------+----------+---------+
| 1 | Bob | Smith | 88 | 96 | 87 | 91 |
+-----------+-----------+----------+---------+---------+----------+---------+
| 2 | Sally | Jenkins | 92 | 75 | 88 | 74 |
+-----------+-----------+----------+---------+---------+----------+---------+
【问题讨论】:
-
最终目标是什么?您想将结果序列化为 json 或类似的东西吗?
-
最终目标是拥有一个集合,我可以对其进行迭代并从(Excel、CSV 等)创建报告。
-
由于您在编译时不知道属性,这将是未知类型(对象、动态等)的列表。可以吗?
-
是的,因为那时我可以遍历集合。一旦我把它们放在一起,我就可以循环遍历集合以构建列标题并获取数据。
标签: c# linq join dynamic pivot