gpt4 book ai didi

c# - 根据动态键获取重复数据

转载 作者:行者123 更新时间:2023-11-30 17:55:16 25 4
gpt4 key购买 nike

我有一个 Person 对象列表:

List<PersonData> AllPersons

从这个列表中,我想要所有那些基于特定属性复制的人对象。

例如,此代码根据 Id 给出所有重复项

var duplicateKeys = AllPersons.GroupBy(p => p.Id).Select(g => new { g.Key, Count = g.Count() }).Where(x => x.Count > 1).ToList().Select(d => d.Key);
duplicates = AllPersons.Where(p => duplicateKeys.Contains(p.Id)).ToList();

p.Id 部分可以是动态的吗?

意思是如果用户在配置文件中指定了唯一的列并且它是这样读的:

string uniqueColumn = "FirstName";

如何编写查询以添加该功能?

问候。

最佳答案

您可以使用反射来实现:

List<PersonData> AllPersons = new List<PersonData>()
{
new PersonData { Id = 1, FirstName = "Tom" },
new PersonData { Id = 2, FirstName = "Jon" },
new PersonData { Id = 3, FirstName = "Tom" }
};

string uniqueColumn = "FirstName";

var prop = typeof(PersonData).GetProperty(uniqueColumn);

var duplicateKeys = AllPersons.GroupBy(p => prop.GetValue(p, null))
.Select(g => new { g.Key, Count = g.Count() })
.Where(x => x.Count > 1)
.Select(d => d.Key)
.ToList();

var duplicates = AllPersons.Where(p => duplicateKeys.Contains(prop.GetValue(p, null))).ToList();

duplicates 在查询执行后有 2 个元素 FirstName == "Tom"

关于c# - 根据动态键获取重复数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15217566/

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