【问题标题】:The source contains no DataRows using Linq源不包含使用 Linq 的 DataRows
【发布时间】:2016-05-07 05:05:56
【问题描述】:

我有多个数据表,并使用第一个数据表和第二个数据表进行过滤,并且使用第一个数据表电子邮件与第三个数据表相同。

下面是我的 C# 代码:

  public void getexport()
{

    DateTime Fromdate = DateTime.ParseExact(txt_FromDate.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
    DateTime Todate = DateTime.ParseExact(txt_ToDate.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
    bo.Dateused = Fromdate;
    bo.Dateused2 = Todate;
    var ds = new DataSet();

    var 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_Educationdetailsbydate(bo);
    dt2 = bl.Get_Employmentdetailsbydate(bo);

    Session["Fromdate"] = txt_FromDate.Text;
    Session["Todate"] = txt_ToDate.Text;
    if (gv_Regdetails.Rows.Count > 0)
    {

            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);
            btnExport.Visible = true;



       }
  }

当没有 DataRows 时,我在过滤后的教育和过滤员工数据表中遇到错误。

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

【问题讨论】:

    标签: c# asp.net linq


    【解决方案1】:
    var row = dt1.AsEnumerable()
      .Where(x => dt.AsEnumerable()
     .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim())).ToList();//Add ToList() at the end of this query.
    
    DataTable filteredEducation  = row.Any() ? row.CopyToDataTable() : filteredEducation.Clone();
    

    【讨论】:

    • 谢谢你能再告诉我一个想法。我在单个 XL 文件中导出三个工作表,但我在第二个 DataTable(教育详细信息表)和第三个 DataTable 中缺少一些用户数据(员工详细信息表)。但是filteredEducation和filteredEmployee表中缺少一些数据,为什么?..我的下一个问题是..stackoverflow.com/questions/35031889/…。 @Govinda Rajbhar
    • 我没有针对您的赏金问题的具体答案,但可能存在区分大小写的问题,因为在评论和复制数据表中也提到了上述方法,尝试解决区分大小写的问题你的表,而不是尝试它可能会有所帮助。
    【解决方案2】:

    问题出现在这里是因为您在没有任何记录时尝试 CopyToDataTable。所以解决方案将是

    var firstDataTable = dt1.AsEnumerable()
      .Where(x => dt.AsEnumerable()
     .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()));
    
    DataTable filteredEducation  = new DataTable();
    
    if(firstDataTable.Any())
    {
        filteredEducation  = firstDataTable.CopyToDataTable();
    }
    

    【讨论】:

    • 谢谢你能再告诉我一个想法。我在单个 XL 文件中导出三个工作表,但我在第二个 DataTable(教育详细信息表)和第三个 DataTable 中缺少一些用户数据(员工详细信息表)。但是filteredEducation和filteredEmployee表中缺少一些数据,为什么?..我的下一个问题是..stackoverflow.com/questions/35031889/…。 @mybirthname
    猜你喜欢
    • 2015-04-04
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 2013-09-25
    • 2023-03-08
    • 2013-01-06
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多