的建议
在这里,我想从两个数据表中查找匹配的记录。 代码是
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;
}
当数据表不包含匹配的记录时,它给出"源不包含数据行"...如何纠正它..请给你
两种方式:
- 在调用
CopyToDataTable
之前,请检查它是否包含带有Enumerable.Any
的行 - 使用
dtfff.Clone
创建一个与源表具有相同架构的空数据表,并使用循环从 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;
我更喜欢第二种方法,因为它只需要执行一次查询。