我正在尝试按部分邮政编码进行分组,如果邮政编码为空或少于 3 个字符,则将它们分组为“”
我见过一些使用可为空比较器的示例,但不确定如何在下面的上下文中的语法中适应类似的内容。
此外,QBModel.ResultsTable 是一个动态列表,CallerZipCode 是一个 char(10),因此具有有效值的内容可能是“96701-----”
var newset = (from rst in QBModel.ResultsTable
group rst by rst.CallerZipCode.Substring(0, 3) into newGroup
select new DataSourceRecord()
{
State = ToTitleCase(newGroup.Select(i => i.CallerState).FirstOrDefault()),
ZipCode = newGroup.Where(z => z.CallerZipCode.StartsWith(newGroup.Key)).Select(x => x.CallerZipCode.Substring(0, 3)).FirstOrDefault()
}).ToList();
这是我发现的一个可为 null 的比较器,但如果我要检查少于 2 个字符的邮政编码,可能需要工作:
public class NullableComparer<T> : IEqualityComparer<T?> where T : struct
{
public bool Equals(T? x, T? y)
{
if (x == null || y == null)
return false;
return x.Equals(y);
}
public int GetHashCode(T? obj)
{
return obj.GetHashCode();
}
}
我怎样才能改变这段代码来完成我所追求的目标?
[编辑]
刚刚尝试过类似的方法,但似乎效果不太好
var newset = (from rst in QBModel.ResultsTable
group rst by rst.CallerZipCode == null || rst.CallerZipCode.Trim().Length() < 3 ? "<null>" : rst.CallerZipCode.Substring(0, 3) into newGroup
select new DataSourceRecord()
{
State = ToTitleCase(newGroup.Select(i => i.CallerState).FirstOrDefault()),
ZipCode = newGroup.Where(z => z.CallerZipCode.StartsWith(newGroup.Key)).Select(x => x.CallerZipCode.Substring(0, 3)).FirstOrDefault()
}).ToList();
互换的青春
相关分类