gpt4 book ai didi

C# 合并 DataTable 与计数器

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:07 25 4
gpt4 key购买 nike

在我的程序中,我将结果保存和加载为 xml 文件。我加载旧结果并想将它们与新结果进行比较,除了级别。应仅保存新结果中的元素。如果一个元素同时出现在新旧结果中,则级别应该提高。

结果的结构不同,但基本上是这样的:

 --------------------------------------
| ID(int) | ... | Level(int) |
--------------------------------------

ID = Unique identifier, always first;
... = Some other stuff depending on the sql query;
Level = Counter, incraeses each time the element appears in results, always last

示例:

旧结果:

1 ; Item1 ; 1
2 ; Item2 ; 2
4 ; Item4 ; 1

新结果:

1 ; Item1 ; 1
2 ; Item2 ; 2
7 ; Item7 ; 1

决赛 table 应该是这样的。

1 ; Item1 ; 2
2 ; Item2 ; 3
7 ; Item7 ; 1

到目前为止我做了什么

    // Returns the final DataTable 
private static DataTable UpdateResults(DataTable oldResults,DataTable newResults) {
// This is where I want to compare the DataTables
}

问题

如何将两个表(没有级别列)的交集作为一个新的DataTable并增加级别?

最佳答案

所以你有两个 DataTables,你想通过增加一个计数器/级别列来将旧的合并到新的?这种使用 LINQ 的 ToLookup 的方法应该有效:

var oldIdLookup = oldResults.AsEnumerable().ToLookup(r => r.Field<int>("ID"));
DataTable final = newResults.Clone();
foreach (DataRow row in newResults.Rows)
{
int id = row.Field<int>("ID");
int level = row.Field<int>("Level");
int count = oldIdLookup[id].Count(); // change logic if desired
int newLevel = level + count; // change logic if desired
final.Rows.Add(id, row.Field<string>("Name"), newLevel);
}

关于C# 合并 DataTable 与计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38475709/

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