2016-05-06 3 views
0

私はIEnumerable<Employee> SelectedEmployeesコレクションのEmployeesクラスのリストからSelectedEmployeesのリストを持っています。繰り返しますが、以下のコードでジェネリックコレクションをネストしました。どのように私は、LINQのは、照会のためではなく、割り当てのためにあるC#LinQを使用してネストされたジェネリックコレクション内の値を設定または割り当てるC#

public class Employee 
    { 
     IList<PhoneProperty> Phones {get; set;} 
    } 

public class PhoneProperty 
    { 
     public bool IsPhoneAssigned { get; set; } 
    } 

答えて

1

ときゅうを使用してのみ、特定の従業員のためにtrueIsPhoneAssigned値を設定することができます。真

にプロパティの値を代入するために/ foreachループ、あなたの従業員

  • を選択するために

    1. LINQのこのような何か:

      var query = SelectedEmployees.Where(x => myCondition(x)); 
      foreach (var q in query) 
          foreach (var p in q.Phones) 
           p.IsPhoneAssigned = true; 
      
      をこのように、あなたの実装では、2つの部分に分割することができます
  • 0
    var employeesList; // this is your list from context 
    foreach(var emp in employeesList) // iterate and change all phones 
    { 
        foreach(var ph in emp.Phones) 
         ph.IsPhoneAssigned = true; 
    } 
    _context.SubmitChanges(); // save changes to context 
    

    問題を解決する別のエレガントな方法が見つかりました:

    var changedCollection = _context.SelectedEmployees.Select(x => 
        { 
         x.Phones.Select(y => 
             { 
             y.IsPhoneAssigned = true; 
             return y; 
             }) 
        }).ToList(); 
    
    _context.SubmitChanges(); 
    

    ここでは、オブジェクトのプロパティを変更してプロパティを変更して返すanonymouse関数を作成します。しかし、実際に私は1つのオプションは、より読みやすく保守的な方法だと思います。

    関連する問題