我需要编写一个LINQ查询,将一个DataTable列连接到另一个DataTable中三个可能列之一的值。
下面的方法可行,但似乎不太正确。有更好的方法吗?
var query = dtDescriptions.AsEnumerable()
.GroupJoin(dtProducts.AsEnumerable(),
idA => idA.Field<string>("idA"),
productid => productid.Field<string>("Product ID"),
(idA, productid) => new { IDA = idA, PRODUCTID = productid })
.GroupJoin(dtProducts.AsEnumerable(),
idB => idB.IDA.Field<string>("idB"),
productid => productid.Field<string>("Product ID"),
(idB, productid) => new { IDB = idB, PRODUCTID = productid })
.GroupJoin(dtProducts.AsEnumerable(),
idC => idC.idB.IDA.Field<string>("idC"),
productid => productid.Field<string>("Product ID"),
(idC, productid) => new { IDC = idC, PRODUCTID = productid });
2条答案
按热度按时间2jcobegt1#
这看起来好多了:
bxgwgixi2#
你可以通过扁平化中间结果来改进你的
Join
方法链,但这并不能真正减少冗余,有时候使用笛卡尔积比过滤结果更好。使用查询语法,您可以:
或者使用流利的语法:
注意:如果您想跟踪匹配的字段,那就有点麻烦了。