我正在创建一个导出Excel工作表的程序,并且我想使用一个列表来读取标题( List<String> lFields ),但是由于某种原因它无法正常工作,但DateTime可以工作。 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个问卷调查应用程序正在为我们的一个团队构建,并且在按照他们的意愿制作报告时遇到了问题(如果可能的话)。 我目前拥有的是:
var completedSurveys = (from s in db.SurveyResponses
join d in db.Demographics on s.SurveyID equals d.SurveyID into grpjoin
from d in grpjoin.DefaultIfEmpty()
select new
{
Survey_ID = s.SurveyID,
Survey_Date = s.Survey.SurveyDate,
Question = s.Questions.QuestionTxt,
Response = s.Responses.ResponseTxt,
Zip_Code = d.ZipCode,
Department = d.CityDepartments.Department,
Ace_Score = s.Survey.AceScore,
}).ToList();
在运行gridview / excel代码后生成的结果是:
他们想要的是一个Excel工作表,该工作表的“问题”列标题以及“ SurveyID”,“日期”,“邮编”,“部门”和“分数”以及对问题的回答作为行数据,因此所有内容仅显示一次。 像这样的excel表,我从其他地方得到的:
例如,我尝试了多个不同的分组:
var completedSurveys = (from s in db.SurveyResponses
join d in db.Demographics on s.SurveyID equals d.SurveyID into grpjoin
from d in grpjoin.DefaultIfEmpty()
group new {s.Questions.QuestionTxt, s.Survey.SurveyDate } by new { s.SurveyID, s.Responses.ResponseTxt, d.ZipCode, d.CityDepartments.Department, s.Survey.AceScore } into g
orderby g.Key.SurveyID ascending
select new
{
Survey_ID = g.Key.SurveyID,
Survey_Date = g.Select(s => s.SurveyDate),
Response = g.Key.ResponseTxt,
Zip = g.Key.ZipCode,
Department = g.Key.Department,
Ace_Score = g.Key.AceScore
}).ToList();
但是我仍然没有得到想要的东西。 如果我必须告诉他们我已经获得的一切都很好,那很好,但是我认为我至少会提出一些建议。 任何援助将不胜感激。
谢谢
您的问题中有几个未知数,但是如果问题的症结是“如何在c#中旋转数据”,那么我有个好消息和个坏消息。 好消息是它是可行的。 坏消息是它并不漂亮。
首先,您想按SurveyId将“ completedSurveys”分组:
var groupedSurveys =
completedSurveys
.GroupBy(g => g.Survey_ID);
然后创建一个您希望自己的行看起来像的类:
public class survey {
public int Survey_ID;
public DateTime date;
public int Zip_Code;
public int Ace_Score;
public string Q1;
public string Q2;
public string Q3;
}
然后,为此类对象创建一个主目录:
var surveys = new List<survey>();
然后,循环浏览分组调查中的分组。 我们将其称为外循环。
在每个外部循环中:
示例代码如下:
foreach (var surveyItems in groupedSurveys) {
var firstItem = surveyItems.FirstOrDefault();
var survey = new survey() {
Survey_ID = firstItem.Survey_ID,
date = firstItem.Survey_Date,
Zip_Code = firstItem.Zip_Code,
Ace_Score = firstItem.Ace_Score
};
foreach(var item in surveyItems) {
switch (item.Question) {
case "Text for question 1":
survey.Q1 = item.Response;
break;
case "Text for question 2":
survey.Q2 = item.Response;
break;
case "Text for question 3":
survey.Q3 = item.Response;
break;
}
}
surveys.Add(survey);
}
您会看到您的调查对象现在具有数据透视,每个调查都有一个“行”。
但是,所有这些都不知道您的excel编写代码。 将事物“标准化”并在此处进行解析可能更明智。 您也可以考虑在服务器级别进行数据透视。 数据透视语句可能会更友好一些。
另外,我不想切入您的逻辑来创建“ completedSurveys”。 但是,只要您将其裁剪,就可以使它整体上看起来更优雅。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.