如果问题重复,请道歉,但我找不到答案。
我有一个邮政编码列表,我希望根据下面给出的有效性示例将其分成两个不同的列表。
private List<LogRecord> records = new List<LogRecord> ( );
rowid邮政编码有效期
1111 XXXX XX无效
2222 AA99 9AA有效
我正在尝试做那样的事情
var result = records.GroupBy ( item => item.Validity ).ToList ( );
var validPostCodes = result.First ( );
var InvalidPostCodes = result.Last ( );
string ValidFormattedPostCodeLogs = String.Join ( "," , validPostCodes );
string InvalidFormattedPostCodeLogs = String.Join ( "," , InvalidPostCodes );
SaveFiles.SaveDataSuccess ( ValidFormattedPostCodeLogs );
SaveFiles.SaveDataFail ( InvalidFormattedPostCodeLogs );
请帮助我出错的地方
[编辑]
我想在csv文件中保存rowid的邮政编码和有效性,所以在转换后,csv文件中的结果应该是这样的
行ID,邮政编码,有效期
11111,XXXX XX,无效
答案 0 :(得分:2)
string.Join
对提供的序列中的元素调用ToString
。因此,您可能没有覆盖ToString()
课程中的LogRecord
。您可以覆盖ToString()
或直接创建字符串,如下所示:
string ValidFormattedPostCodeLogs = String.Join (Environment.NewLine ,
validPostCodes.Select(pc => $"{pc.RowID}, {pc.PostCode}, {pc.Validity}));
请注意,validPostCodes
仍然是LogRecord
个实例的序列。因此,您希望使用Environment.NewLine
作为分隔符加入它们。 ,
是&#34;列&#34;之间的分隔符,LogRecord
的属性。
答案 1 :(得分:2)
相反,对于两个单独的列表,为什么不尝试使用词典?我的意思是这样的:
var result = records.GroupBy(item => item.Validity )
.ToDictionary(x=>x.Key, x=>x.ToList());
这样result["Valid"]
会为您提供有效项目列表,result["InValid"]
会为您提供无效项目列表。这意味着输出可以被视为:
string ValidFormattedPostCodeLogs = String.Join("," , result["Valid"]
.Select(x => x.ToString()).ToList());
string InvalidFormattedPostCodeLogs = String.Join ( "," , result["InValid"].Select(x => x.ToString()).ToList());
格式化输出的最佳选项是overrides
ToString
,如下所示:
public class LogRecord
{
// ...
public override string ToString()
{
return String.Format("{0},{1},{2}",this.row_id,this.PostCode,this.validity);
}
}