[英]using linq Query how can i update multipul Records
在这里,我将ENQUIRY_CODE的Multipul值设为1,2,3
public void HRUpdateStatus(string ENQUIRY_CODE, int uid)
{
var x = (from e in db.EMS_ENQUIRYREGISTRATION_MASTER
where e.ENQUIRY_CODE == ENQUIRY_CODE
select e).ToList();
foreach (var abc in x)
{
abc.HRowner = uid;
db.SaveChanges();
}
...
}
请帮我在哪里我做错了
LINQ语句永远不会更改源序列 。
LINQ并非要这样做。
正确的解决方案取决于您使用哪种DbContext。 如果使用实体框架,则必须先获取项目,然后才能更新一个或多个属性。
在您的情况下,您想将所有获取的值的一个属性更改为相同的新值。 考虑为您的DbContext创建扩展功能。 查看神秘化的扩展方法
以下内容采用某个源类(TSource)的IQueryable序列,以及应在每个源元素上执行的操作。
public void ForEach<TSource>(this IQueryable<TSource> source,
Action<TSource> action)
{
var fetchedItems = source.ToList();
foreach (var fetchedItem in fetchedItems)
{
action(fetchedItem);
}
}
用法:
using (var dbContext = new MyDbContext())
{
db.EMS_ENQUIRYREGISTRATION_MASTER
.Where (registrationMaster => registrationMaster.ENQUIRY_CODE == ENQUIRY_CODE)
.ForEach(registrationMaster => registrationMaster.HRowner = uid);
db.SaveChanges();
}
我选择返回void
而不是IEnumerable<TSource>
来向函数用户指示查询的数据已实现并且可能已更改。 毕竟,以下内容可能令人困惑:
IQueryable<Student> students = ...
var updatedStudents = students.ForEach(student => student.Grades.Add(new Grade(...))
.Take(2)
.ToList();
您想传达的信息是所有学生都在更新,而不仅仅是2人。考虑返回IReadonlyList<TSource>
或类似的内容,因此您不必再次实现数据。
我认为这是您的意思:
var codes = ENQUIRY_CODE.Split(',').ToList();
var x= db.EMS_ENQUIRYREGISTRATION_MASTER.Where(s => codes.Contains(s.ENQUIRY_CODE)).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.