【发布时间】:2019-07-31 20:05:14
【问题描述】:
我有以下代码:
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();
【问题讨论】: