2017-11-18 15 views
0

私はキャッシュに生徒のリストを持っています。アイテムを更新したいのですが、どうすればいいですか?Cでlinqを使用してリストを更新する方法#

public class Student 
{ 
    int id; 
    string name; 
    string address; 
} 

public void updateStudent(Student st) 
{ 
    var student = _cache.Get(CacheVariable.cache_data_student) as List<Student>; 
    //How to update student. 
} 
+0

更新とはどういう意味ですか?目的の動作を説明してください。 – Fruchtzwerg

+0

実際には 'Update'メソッドはありません。' updateStudent'関数に渡されるアイテムを更新したいと思います。 –

+1

必要なすべてのプロパティを更新して、学生に独自の更新メソッドを実装する必要があります。 – Fruchtzwerg

答えて

0
public class Student 
{ 
    int id; 
    string name; 
    string address; 
} 

public void updateStudent(Student st) 
{ 
    var student = _cache.Get(CacheVariable.cache_data_student) as List<Student>; 

    //First look for the st in Student list, you need the id field or primary key 
    var s = student.Where(x => x.idField == st.idField).FirstOrDefault(); 
    s = st; 
    //student = st;//student.Update(st); //Not working. Only pass the value 
} 
+0

'student'は学生のリストで、' st'は学生の単なるアイテムです。どうすれば 'student = st'を設定できますか? –

+0

もちろん申し訳ありません。 –

0

たぶん、あなたは小さなクエリでそれを行うことができます。

最初この更新された生徒は誰ですか?

し、リストからこの生徒の場所を探す

は、新しい値でこの場所を変更し

 var student = _cache.Get(CacheVariable.cache_data_student) as List<Student>; 
     Student findStudent = student.FirstOrDefault(x=> x.Id == st.Id); 
     int id = student.IndexOf(y); 
     student[id] = st; 

またはあなたがのように最後の行のために別のものを使用することができますしたい場合:

student[id] = new Student() 
{ 

id = x, 

name = "y", 

address = "z" 

}; 

おそらくこの状況のた​​めのより良い解決策がありますが、わかりません。

public void updateStudent(Student st) 
{ 
    Student studentToUpdate = _cache.FirstOrDefault(s => s.id == st.id) 
    studentToUpdate?.Update(st); 
} 

独自のメソッドを実装する必要があり、あなたの学生を更新するには:私は、学生が更新するために取得するためにLINQを使用し、IDは一意の識別子でなければなりませんので、これは

0

参考になっ可能性だと思います。ちょうどそのようなプロパティを設定する

public class Student 
{ 
    public int id { get; } 
    public string name { get; set; } 
    public string address { get; set; } 

    public void Update(Student st) 
    { 
     this.name = st.name; 
     this.address = st.address; 
    } 
}