在这里,我想找到两个数据表中的匹配记录。代码是
public DataTable textfiltering(DataTable dtfff, DataTable dtff)
{
DataTable ds = (DataTable)Session["maintxt"];
DataTable dts = (DataTable)Session["sectxt"];
dtfff = ds;
dtff = dts;
DataTable dtMerged = (from a in dtfff.AsEnumerable()
join b in dtff.AsEnumerable()
on a["contacts"].ToString() equals b["contacts"].ToString()
into g
where g.Count()>0
select a).CopyToDataTable();
return dtMerged;
}
它给出了#34;源不包含DataRows"当数据表不包含匹配记录时... 如何纠正它......请给出你的建议
答案 0 :(得分:6)
两种方式:
Enumerable.Any
CopyToDataTable
行
dtfff.Clone
创建一个与源表具有相同模式的空DataTable,并使用循环从LINQ查询中填充它。第一种方法:
var rows = from a in dtfff.AsEnumerable()
join b in dtff.AsEnumerable()
on a["contacts"].ToString() equals b["contacts"].ToString()
into g
where g.Count() > 0
select a;
DataTable merged;
if (rows.Any())
merged = rows.CopyToDataTable();
else
merged = dtfff.Clone();
return merged;
第二种方法:
DataTable merged = dtfff.Clone();
foreach (DataRow sourceRow in rows)
{
merged.ImportRow(sourceRow); // or add all fields manually
}
return merged;
我更喜欢第二种方法,因为它只需要执行一次查询。