林克表达式 .任意(列表<string>)



我有一个列表,其中包含(除其他外)备注1,备注2和备注3。我想确保在这些字段中只写有效的注释。今天我这样检查它:

foreach (GradeRow row in Grade.GradeRows)
{
    if (!(okRemarks.Contains(row.Remark1) && okRemarks.Contains(row.Remark2) && okRemarks.Contains(row.Remark3)))
    {
        FailedCourseCodes.Add(row.CourseCode);
    }
}

有没有一个 Linq 表达式可以做类似的事情.包含(列表)?

您仍然需要单独检查每个字段,但可以消除循环:

FailedCourseCodes.Add(
    Grade.GradeRows.Where(row=>
        okRemarks.Contains(row.Remark1) && 
        okRemarks.Contains(row.Remark2) && 
        okRemarks.Contains(row.Remark3)
        )
);

您可以通过从字段创建一个数组来使其稍短:

FailedCourseCodes.Add(
    Grade.GradeRows.Where(row=>
        (new [] {row.Remark1, row.Remark2, row.Remark3})
            .Except(okRemarks).Any()
        )
);

但在我看来,这显然更难阅读。

像这样的东西将返回所有包含错误注释的行:

 Grade.GradeRows.Where( row => new string[]{row.Remark1, row.Remark2, Row.Remark3}.Any ( remark => !okRemarks.Any(remark)))

.相交( IEnumerable ) 然后比较结果的 Count() 是我能想到的唯一选择。以下几行

foreach( var failedGrade in Grade.GradeRows
                                  .Select( x => new String[]{ row.Remark1, row.Remark2, row.Remark3 } )
                                  .Where( remarks => remarks.Intersect( okRemarks ).Count() < remarks.Length ) )
{
    FailedCourseCodes.Add(failedGrade.CourseCode);
}

@d-Stanley做对了,但没有正确添加结果

foreach( var failedGrade in Grade.GradeRows.Where( row => !(
                                                okRemarks.Contains(row.Remark1) &&
                                                okRemarks.Contains(row.Remark2) &&
                                                okRemarks.Contains(row.Remark3) ) ) )
{
    FailedCourseCodes.Add(failedGrade.CourseCode);
}

相关内容

  • 没有找到相关文章

最新更新