有没有办法使用 LINQ 更新泛型列表,而不是删除列表的成员并将其重新添加

本文关键字:列表 成员 添加 新添加 删除列 LINQ 更新 泛型 有没有 删除 | 更新日期: 2023-09-27 18:36:43

LINQ 是否允许更新插入类型的操作或更新现有记录?我有以下代码,它从列表中获取"记录",更新其中的某些部分,然后删除原始记录并添加回此更新的记录:

. . .
Student student = LINQ2ObjectsCode.GetStudentForId(ah.StudentID_FK);
// Update several members of the Students list...
student.WeekOfLastAssignment = _currentWeek;
int nextTalkTypeId = AYttFMConstsAndUtils.GetNextTalkIDForBrothers(ah.StudentID_FK, 1); 
student.RecommendedNextTalkTypeID = nextTalkTypeId;
student.NextCounselPoint = LINQ2ObjectsCode.GetNextCounselPoint(nextTalkTypeId, student.NextCounselPoint);
// ...then update that record by first deleting the old one...
AYttFMConstsAndUtils.StudentsList.RemoveAll(x => x.StudentID == ah.StudentID_FK);
// ...and then adding back the updated one:
AYttFMConstsAndUtils.StudentsList.Add(student);
. . .
public static Student GetStudentForId(int _studentId)
{
    return AYttFMConstsAndUtils.StudentsList.SingleOrDefault(
        i => i.StudentID.Equals(_studentId));
}

。但我不知道这是否是首选方法。有没有办法更新现有记录,而不是销毁它并用新版本替换它?我想有,但我不知道有多复杂,以及它是否真的更好或只是不同。我将有几种类似的方法,但我不想多次做"错误"的事情。

注意:数据不是来自数据库;而是存储在json文件中。

有没有办法使用 LINQ 更新泛型列表,而不是删除列表的成员并将其重新添加

无需删除并再次添加实体。

通常,如果列表是

本地列表,则对象是引用的。因此,您可以查询对象,并就地修改其属性,并且您已经更新了实际对象的字段。

对于 LINQ2SQL 或 EF 或 ORM 实体,每当获取记录时,上下文管理器都会跟踪实体的状态。您可以修改其属性,并在上下文上执行 SubmitChanges() 或 SaveChanges(),记录将自动更新。

请注意,您需要在上下文范围内才能执行获取、修改某些属性和执行保存更改。如果在获取实体后丢失了上下文,您仍然可以轻松修改实体,只是您需要再次附加对象并保存上下文。

让我知道您是否需要执行此操作的LINQ2SQL或 EF 实例。(附加实体)

例如

using (var context = new YourDbContext())
{
 Student student = LINQ2ObjectsCode.GetStudentForId(context, ah.StudentID_FK);
 // Update several members of the Students list...
 student.WeekOfLastAssignment = _currentWeek;
 int nextTalkTypeId =  
 AYttFMConstsAndUtils.GetNextTalkIDForBrothers(ah.StudentID_FK, 1); 
 student.RecommendedNextTalkTypeID = nextTalkTypeId;
 student.NextCounselPoint = LINQ2ObjectsCode.GetNextCounselPoint(nextTalkTypeId,  
 student.NextCounselPoint);
 context.SaveChanges(); // ef
}