Linq表达式.Any(List <string>)

eke*_*man 0 c# linq

我有一个List包含(除其他外)Remark1,Remark2和Remark3.我想确保只在这些字段中写入有效的备注.今天我检查一下:

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

是否有Linq表达式可以执行类似.Contains(List)的操作?

D S*_*ley 5

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

FailedCourseCodes.Add(
    Grade.GradeRows.Where(row=>
        okRemarks.Contains(row.Remark1) && 
        okRemarks.Contains(row.Remark2) && 
        okRemarks.Contains(row.Remark3)
        )
);
Run Code Online (Sandbox Code Playgroud)

可以通过从字段创建数组来使其稍微缩短:

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

但在我看来,这一点要难得多.