gpt4 book ai didi

c# - 如何在 Linq 中循环遍历数据表?

转载 作者:行者123 更新时间:2023-12-05 04:18:25 25 4
gpt4 key购买 nike

我正在尝试对我拥有的数据表执行内部联接

我的代码如下

 var Result = from row1 in t1
join row2 in t2 on row1.ID equals row2.ID
join row3 in t3 on row1.ID equals row3.ID
select new { Emp.ID = row1.ID, Col1 = row2.col1, Col2 = row3.col2

在这个片段中只有 3 个表,而我的表数不固定

我可以遍历表并执行连接吗?

这会是最好的方法吗??

请帮忙

最佳答案

以下方法使用 DataTable列表来处理动态数量的数据表。该代码生成一个 ListIEnumerable<object> .此示例假定将添加到连接中每个其他数据表的最终项目结构的列值位于相同位置(在我们的示例中,我使用了 row2[1],因此我采用了第二个位置)。

[编辑] 我还添加了一个连接多个列/连接表的示例

    // create the collection
List<DataTable> dts = new List<DataTable>();

// add some test datatables
for (int i = 0; i < 10; i++)
{
var dt = new DataTable();
dt.TableName = i.ToString();
dt.Columns.Add("ID");
dt.Columns.Add("col" + i.ToString());
dt.Columns.Add("otherCol" + i.ToString());
dt.Rows.Add(1, "x1" + i.ToString(), DateTime.Now);
dt.Rows.Add(2, "x2" + i.ToString(), DateTime.Now);
dts.Add(dt);
}

// get the ID column position in the first table
var idPosition = dts[0].Columns["ID"].Ordinal;

// used for storing the results
var results = new List<IEnumerable<object>>();

// add the columns from the first table
results = dts[0].AsEnumerable()
.Select(j => j.ItemArray.AsEnumerable()).ToList();

// join all tables
dts.Skip(1).ToList().ForEach((list) =>
{
results = results
.AsEnumerable()
.Join(
list.AsEnumerable(),
x => x.Skip(idPosition).First(),
x => x["ID"],
// select the second column
(row1, row2) => row1.Concat(new[] { row2[1] }))
// replace the preceding line with
// the following one to select the second and the third column
//(row1, row2) => row1.Concat(new[] { row2[1], row2[2] }))
.ToList();
});

关于c# - 如何在 Linq 中循环遍历数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com