如何在c#中使用linq更新列表

时间:2017-11-18 10:13:34

标签: c# list 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.
}

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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"

};

对于这种情况,可能有更好的解决方案,但我不知道。我认为这可能会有所帮助

答案 2 :(得分: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;
    }
}