0

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

.Contains(List)のようなことを実行できるLinq式はありますか?

4

3 に答える 3

5

各フィールドを個別に確認する必要がありますが、ループを排除できます。

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()
        )
);

しかし、私の意見では、それを読むのは非常に困難です。

于 2013-01-24T14:42:46.020 に答える
1

このようなものは、悪い発言を含むすべての行を返します。

 Grade.GradeRows.Where( row => new string[]{row.Remark1, row.Remark2, Row.Remark3}.Any ( remark => !okRemarks.Any(remark)))
于 2013-01-24T14:43:18.450 に答える
0

.Intersect( 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);
}
于 2013-01-24T15:35:10.087 に答える