先附上代码:
IEnumerable<DataRow> result =
from c in dt2.AsEnumerable()
join p in dt1.AsEnumerable()
on new { ID = dt2.Columns[3], NAME = dt2.Columns[4], ACCOUNT = dt2.Columns[5], DATE = dt2.Columns[6], AMOUNT = dt2.Columns[7] }
equals new { ID = dt1.Columns[5], NAME = dt1.Columns[6], ACCOUNT = dt1.Columns[7], DATE = dt1.Columns[8], AMOUNT = dt1.Columns[9] }
into rightjoin
from n in rightjoin.DefaultIfEmpty()
where dt2.Columns[3] != null && dt2.Columns[4] != null
select n;
dtN = result.CopyToDataTable<DataRow>();
问题1:如何用LINQ选取两张数据表关联之后的表中所有的字段(即上文rightjoin中所有字段)?上文代码运行后抛出异常:DataRow reference that is null。应该如何修改
问题2:如何在两张表关联之前,筛选掉dt2.Columns[3] 和dt2.Columns[4]这两个字段为空的值 ?上文代码运行后,还是会将字段为空的值显示出来
因为设计要求,我需要把两表关联的所有字段选出,并且用户在使用时可能会新增字段,所以没办法在select中逐一列出全部字段,还请各路大侠附上代码指点迷津,小弟拜谢啦~
------解决思路----------------------
你的代码有N多错误,简直不忍直视。。。
还有,你这写的是leftjoin, 不是rigthjoin
剩下就是基本的语法错误了 ,我就不说了,你自己看代码吧。。
IEnumerable<DataRow> result =
from c in dt2.AsEnumerable()
where c.Field(3) != null && c.Field(4) != null
join p in dt1.AsEnumerable()
on new { ID = c.Field(3), NAME = c.Field(4), ACCOUNT = c.Field(5), DATE = c.Field(6), AMOUNT = c.Field(7) }
equals new { ID = p.Field(5), NAME = p.Field(6), ACCOUNT = p.Field(7), DATE = p.Field(8), AMOUNT = p.Field(9) }
into rightjoin
from n in rightjoin.DefaultIfEmpty()
select new{ID=c.Field(3),Name=n==null?"":n.Field(6)};