2017-11-18 53 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; 
    } 
}