1

コレクション内のオブジェクトの特定のプロパティのすべての値が数値であり、ゼロより大きいかどうかを判断するロジックを作成しようとしています。これは ForEach を使用して簡単に記述できますが、Linq to Object を使用して行いたいと思います。私はこれを試しました:

var result = entity.Reports.Any(
    x =>
    x.QuestionBlock == _question.QuestionBlock
    && (!string.IsNullOrEmpty(x.Data)) && Int32.TryParse(x.Data, out tempVal) 
    && Int32.Parse(x.Data) > 0);

正しく動作しません。Int32 の TryParse() が、int に解析できない文字列に初めて遭遇したときに false を返すことを期待して、これも試しました。しかし、out パラメーターには、int に解析できる最初の値の文字列値が含まれているようです。

var result = entity.GranteeReportDataModels.Any(
    x =>
    x.QuestionBlock == _question.QuestionBlock
    && (!string.IsNullOrEmpty(x.Data)) && Int32.TryParse(x.Data, out tempVal));

どんな助けでも大歓迎です!

4

3 に答える 3

3

「すべての」値が条件を満たしているかどうかをテストする場合は、 ではなくAll拡張メソッド offを使用する必要があります。私は次のように書きます:IEnumerable<T>Any

var result = entity.Reports.All(x =>
{
  int result = 0;
  return int.TryParse(x.Data, out result) && result > 0;
});

int.TryPrasenull または空の文字列を渡すと false が返されるため、null または空の文字列をテストする必要はないと思います。

于 2013-05-03T15:11:05.610 に答える