2017-11-18 81 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

'學生'是學生的名單,'ST'只是學生的一個項目,我怎麼能設置'學生= 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" 

}; 

這種情況可能有更好的解決方案,但我不知道。我認爲這可能是有益的

0

由於ID應該是唯一的標識符,使用LINQ讓學生更新:

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

要更新你的學生,你需要實現自己的方法。只需設置屬性,如

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