我已经想出了一些LINQ代码来“动态”地将多个表和多个字段连接在一起,这意味着用户可以选择他想要连接的表和字段。但我很难将它扩展到多个表,而不是像我在这里做的那样:
if (Tables.Count == 2)
{
result = from dataRows1 in Tables[0].AsEnumerable()
join dataRows2 in Tables[1].AsEnumerable()
on new ComparableObject(new List<DataRow> { dataRows1 },KeyFieldToJoinOn[0].Item1)
equals new ComparableObject(dataRows2, KeyFieldToJoinOn[0].Item2)
select dtResult.LoadDataRow(
dataRows1.ItemArray.Concat(dataRows2.ItemArray)
.ToArray(), false);
}
else if (Tables.Count == 3)
{
result = from dataRows1 in Tables[0].AsEnumerable()
join dataRows2 in Tables[1].AsEnumerable()
on new ComparableObject(new List<DataRow> { dataRows1 }, KeyFieldToJoinOn[0].Item1)
equals new ComparableObject(dataRows2, KeyFieldToJoinOn[0].Item2)
join dataRows3 in Tables[2].AsEnumerable()
on new ComparableObject( new List<DataRow> { dataRows1, dataRows2 },KeyFieldToJoinOn[1].Item1)
equals new ComparableObject(dataRows3, KeyFieldToJoinOn[1].Item2)
select dtResult.LoadDataRow(
dataRows1.ItemArray.Concat(dataRows2.ItemArray)
.Concat(dataRows3.ItemArray)
.ToArray(),false);
}我看过dynamic-LINQ库,但还没有看到关于如何动态加入的全面文档。所有这些都来自于我不能在数据表上执行sql查询的事实,这将使事情变得更容易,因为我可以构建我的查询。
谢谢你的建议。
发布于 2016-05-04 11:26:19
在我看来,您应该使用foreach循环来迭代表,而不是编写这些if else条件。您还可以使用LINQ根据您的要求过滤表内容。
https://stackoverflow.com/questions/36974473
复制相似问题