我从数据库中得到了一个记录列表,我在我的CRUD类中检索过这样的记录(我正在使用实体框架,Model.question是我的类,里面有CRUD代码):
public IList<Model.questionhint> GetRecords(int listTask, int listActivity)
{
IList<Model.questionhint> lstRecords = context.questionhints.ToList();
return lstRecords.Where(a => a.TaskID == listTask && a.ActivityID == listActivity).ToList();
}
这就是我从我的xaml.cs中调用它的方式:
IList<Model.questionhint> lstQuestionHints = qh.GetRecords(taskID, activityID);
StackPanel sp = new StackPanel();
foreach (Model.questionhint qhm in lstQuestionHints)
{ //Code here
}
但是在我的数据库表中,有一个列调用questionNo,一些记录具有相同的questionNo,activityID和taskID。一些记录具有相同的activityID和taskID但不同的questionNO。 这就是我的数据库表的样子:
目前,我可以很好地显示每个记录(使用foreach循环),但我想要的是将相同activityID,taskID和questionNo的记录组合在一行,现在每条记录都是逐行分开的这个:
我希望它像
我[回答]每天下午小睡一次
太阳[回答]没有绕地球移动。
我试图通过CRUD中的查询进行分组(我正在使用lambda表达式),但由于某些igrouping和数据整形的原因(这里不好)它失败了,有没有其他方法可以轻松地做到这一点?
我想到的是使用foreach循环,但是我可以得到questionNo的下一个值吗?例如在这个循环中,questionNo是1,我想检查下一个循环中的questionNo是否相同,如果不相同,我会将它添加到下一行,但如果它相同,我会将它添加到同一行。但我不熟悉面板和东西,因为我不熟悉编程以及WPF / C#。
非常感谢任何帮助/解决方案,提前谢谢。
答案 0 :(得分:0)
首先,我不会尝试在一个声明中这样做。您可能希望稍微预处理数据,因为每个问题(例如单行)都包含起始内容部分,选项部分和结束部分的重叠,跨越至少2条记录。
所以,创建一个代表问题一部分的模型,就像这样(只是一个例子):
public abstract class QuestionPart {}
public class ContentPart : QuestionPart {
// holds the content
}
public class OptionsPart : QuestionPart {
// holds the options and the answer
}
public class Question{
public List<QuestionPart> questionParts {get; set;}
}
public class YourViewModel{
public List<Question> questions {get; set;}
}
然后,Question
个对象可以垂直堆叠,每个QuestionPart
中的每个Question
都可以被包裹(可能WrapPanel
最适合这里)链接到一个问题
要将数据收集到问题集合中 - 您可以执行以下操作(我可能有错误 - 我还没有编译它,但这应该给你一个想法):
List<QuestionPart> questionParts = lstQuestionHints.SelectMany((r) => ExtractQuestionParts(r)); // ExtractQuestionParts returns a list of 1 or more question parts from each record
var groupedQuestionParts = questionParts.GroupBy((r) => r.QuestionNo);
var questions = groupedQuestionParts.Select((g) => return new Question(g.Key, g.ToList()));
既然您拥有Questions
的集合,您可以在代码隐藏中创建控件(您似乎想要这样做),或者使用XAML和ItemsControls
以及{{1}进行模拟等等...
希望它有所帮助。