gpt4 book ai didi

c# - 通过分组方法对多个属性进行 linq 分组

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:13 25 4
gpt4 key购买 nike

我有以下代码:

var linqResults = (from rst in QBModel.ResultsTable
group rst by GetGroupRepresentation(rst.CallerZipCode, rst.CallerState) into newGroup
select newGroup
).ToList();

用分组方法:

private string[] GetGroupRepresentation(string ZipCode, string State)
{
string ZipResult;
if (string.IsNullOrEmpty(ZipCode) || ZipCode.Trim().Length < 3)
ZipResult = string.Empty;
else
ZipResult = ZipCode.Substring(0, 3);

return new string[]{ ZipResult, State };
}

这运行得很好,但它根本不分组。 QBModel.ResultsTable 有 427 条记录,在 linq 运行后,linqResults 仍然有 427 条记录。在调试中,我可以看到相同截断的邮政编码和州名称的双倍。我猜这与我从分组方法返回的数组有关。

我在这里做错了什么?

如果我在不使用数组的情况下连接截断的邮政编码和州名称的返回值,我会得到 84 个分组。

如果我删除 rst.CallerState 参数并将分组方法更改为:

private string GetGroupRepresentation(string ZipCode)
{
if (string.IsNullOrEmpty(ZipCode) || ZipCode.Trim().Length < 3)
return string.Empty;
return ZipCode.Substring(0, 3);
}

它将返回 66 个组

我真的不想连接组值,因为我想稍后单独使用它们,这是错误的,因为它基于数组是否有效,但是,有点像以下内容:

List<DataSourceRecord> linqResults = (from rst in QBModel.ResultsTable
group rst by GetGroupRepresentation(rst.CallerZipCode, rst.CallerState) into newGroup
select new MapDataSourceRecord()
{
State = ToTitleCase(newGroup.Key[1]),
ZipCode = newGroup.Key[0],
Population = GetZipCode3Population(newGroup.Key[0])
}).ToList();

最佳答案

数组是引用类型,所以当分组方法比较两个具有相同值的数组时,不能确定它们是否相同,因为引用不同。你可以阅读更多here

一个解决方案是考虑一个类而不是对函数结果使用数组,并使用另一个类来比较实现 IEqualityComparer 接口(interface)的结果,并将其传递给 GroupBy 方法,以便分组方法可以找到哪些组合ZipCode 和 State 真的是等同的。 read more

关于c# - 通过分组方法对多个属性进行 linq 分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57283271/

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