c#基于参数值拆分子列表中的列表

时间:2017-02-07 12:02:37

标签: c#

如果问题重复,请道歉,但我找不到答案。

我有一个邮政编码列表,我希望根据下面给出的有效性示例将其分成两个不同的列表。

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,无效

2 个答案:

答案 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);
    }
}