在下面的excel文件中,我需要读取Student
类的行,这些行为唯一ID定义单个对象,然后获得与该学生相关的所有考试。
如果我使用以下代码,我会生成等于行数的学生数,而不为每个对象学生指定考试列表。
IQueryable<Student> Students_var;
var excel = new ExcelQueryFactory(fileName_global1);
excel.AddMapping<Student>(x => x.ID, "STU_NO");
Students_var = from c in excel.Worksheet<Student>("Stu_Schedule")
select c;
List<Student> StudentList_c = Students_var.ToList();
答案 0 :(得分:0)
我已经简化了你的问题,以便进行工作单元测试。
我在本地创建值而不是从excel文件中读取它。
在我正在创建的值中我有3个项目,但只有2个学生,所以我验证linq查询总是返回2个记录。
您可以在下面的代码中看到如何对商品进行分组。
[Test]
public void LinqSelect_MultipleRowsWithTheSameId_RemoveDuplicatedRecords()
{
var excel = new [] {new Student() {ID = 1,Exam = 1}, new Student() { ID = 1, Exam = 2 }, new Student() { ID = 2, Exam = 1 } };
IEnumerable<IGrouping<int,Student>> Students_var = from c in excel
group c by c.ID into newExcel
select newExcel;
Assert.AreEqual(2, Students_var.ToList().Count);
}
public class Student
{
public int ID { get; set; }
public int Exam { get; set; }
}
答案 1 :(得分:0)
您可以按学生ID分组,然后将每个考试添加到学生对象。
var grouped = StudentList_c.GroupBy(x => x.ID).Select(x => new Student
{
ID = x.Key,
Exam = x.SelectMany(z=> z.Exam).ToList()
}).ToList();
public class Student
{
public int ID { get; set; }
public List<int> Exam { get; set; }
}
答案 2 :(得分:0)
- @jobsforyou.where(:is_finished => false, :is_active => true, :user_id => current_user, :sort <= 2).limit(10).each do |job|