使用DataTable和Linq导出到Excel中缺少某些数据

moh*_*han 12 c# linq asp.net datatable excel

我在单个XL文件中导出三个工作表,但我在第二个DataTable(工作Education Details表)和第三个DataTable(工作Employeement Details表)中缺少一些用户数据.

Education Details表是某些用户不在那里,而是Employeement Details用户正在显示的表单.用户电子邮件ID是三个数据库表.

    DataSe ds = new DataSet();
    DataTable dt = new DataTable("Registration Details");
    DataTable dt1 = new DataTable("Education Details");
    DataTable dt2 = new DataTable("Employeement Details");


    dt = bl.Get_Registrationdetailsbydate(bo);
    gv_Regdetails.DataSource = dt;
    gv_Regdetails.DataBind();
    dt1 = bl.Get_Registrationdetailsbydate1(bo);
    dt2 = bl.Get_Registrationdetailsbydate2(bo);
    DataTable filteredEducation = dt1.AsEnumerable()
          .Where(x => dt.AsEnumerable()
          .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
          .CopyToDataTable();
    DataTable filteredEmployee = dt2.AsEnumerable()
          .Where(x => dt.AsEnumerable()
          .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
          .CopyToDataTable();

    dt.TableName = "Registration Details";
    filteredEducation.TableName = "Education Details";
    filteredEmployee.TableName = "Employeement Details";
    ds.Tables.Add(dt);
    ds.Tables.Add(filteredEducation);
    ds.Tables.Add(filteredEmployee);
    ExcelHelper.ToExcel(ds, "DangoteUsers.xls", Page.Response);
Run Code Online (Sandbox Code Playgroud)

我根据第一个DataTable用户做了结果Email,然后DataTable根据第一个DataTable Emailid 填充第二个详细信息用户.与...相同Employment Details.第一DataTable和第二个问题DataTable.我DataTable也没有回来.

我参考这个例子

Vir*_*iru 1

我认为您在 linq 查询中的字符串比较是一个问题..您的电子邮件地址可能有不同的大小写,这可能导致此问题。尝试下面的代码

DataTable filteredEducation = dt1.AsEnumerable()
          .Where(x => dt.AsEnumerable()
          .Any(z => z.Field<string>("Email").Trim().Equals(x.Field<string>("Email").Trim(),StringComparison.CurrentCultureIgnoreCase)))
          .CopyToDataTable();
    DataTable filteredEmployee = dt2.AsEnumerable()
          .Where(x => dt.AsEnumerable()
          .Any(z => z.Field<string>("Email").Trim().Equals(x.Field<string>("Email").Trim(),StringComparison.CurrentCultureIgnoreCase)))
          .CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)