2

LINQを使用してコレクション内のnullである特定のプロパティを検索し、結果(サブリスト)を調べて同じコレクションの別のプロパティでメソッドを実行する、次のメソッドに関するアドバイスやヒントを求めています。 。

private void SetRaises()
{
    if (employeeCollection != null)
    {
      var noRaiseList = employeeCollection .Where(emp => emp.Raise == null).ToList();
      foreach (var record in noRaiseList )
      {
         CalculateRaise(record);
      }
    }
}

public void CalculateRaise(Employee emp)
{
    if (emp!= null)
        emp.Raise = emp.YearsOfService * 100;
}

最初のメソッドであるSetRaises()で気に入らない部分は、次のスニペットです。

foreach (var record in noRaiseList )
{
    CalculateRaise(record);
}

その部分をLINQ式に直接統合する方法はありますか?つまり、私が知らない拡張メソッドはありますか?

ありがとうございました!

4

4 に答える 4

5

最初にできることは次のとおりです:中間リストを生成しないでください:

 var pending = employeeCollection.Where(emp => emp.Raise == null);
 foreach (var record in pending)
 {
     CalculateRaise(record);
 }

これは次と同じです:

 foreach (var record in employeeCollection.Where(emp => emp.Raise == null))
 {
     CalculateRaise(record);
 }

これは現在、バッファリングされていない遅延実行です。

しかし、率直に言って、ここでの LINQ はあまり役に立ちません。次のこともできます。

foreach(var emp in employeeCollection)
{
    if(emp.Raise == null) CalculateRaise(emp);
}
于 2013-02-14T10:17:44.813 に答える
0

Raise なしで従業員のリストが必要ない場合は、これを 1 行で実行できます。

employeeCollection.Where(emp => emp.Raise == null).ToList().ForEach(x => x.Raise = x.YearsOfService * 100);
于 2013-02-14T10:19:30.330 に答える
0

ForEach チェーン メソッドを使用できます。しかし、それは砂糖の構文にすぎません。

employeeCollection.Where(emp => emp.Raise == null)
                  .ToList()
                  .ForEach(record => CalculateRaise(record))
于 2013-02-14T10:22:56.777 に答える
0

次のようになります。

var noRaiseList = employeeCollection .Where(emp => emp.Raise == null).ToList().ForEach(e=>e.Raise = e.YearsOfService * 100);
于 2013-02-14T10:23:29.017 に答える