阅读带有linq-skip重复id的Excel表格

时间:2016-09-18 11:20:24

标签: c# excel linq linq-to-excel

在下面的excel文件中,我需要读取Student类的行,这些行为唯一ID定义单个对象,然后获得与该学生相关的所有考试。

enter image description here

如果我使用以下代码,我会生成等于行数的学生数,而不为每个对象学生指定考试列表。

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();

3 个答案:

答案 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|