使用linq查询如何更新multipul记录

时间:2019-02-25 10:09:09

标签: c# linq

这里我将ENQUIRY_CODE的Multipul值设为1,2,3

git reset --hard
git gc --aggressive
git prune
git clean -df

请帮助我我犯错的地方

2 个答案:

答案 0 :(得分:1)

LINQ语句永远不会更改源顺序
 LINQ并非要这样做。

正确的解决方案取决于您使用的是哪种DbContext。如果您使用实体框架,则必须先获取项目,然后才能更新一个或多个属性。

在您的情况下,您想要将所有获取的值的一个属性更改为相同的新值。考虑为您的DbContext创建扩展功能。参见extenstion methods demystified

以下内容采用某个源类(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>或类似的内容,因此您不必再次实现数据。

答案 1 :(得分:0)

我想这就是你的意思:

var codes = ENQUIRY_CODE.Split(',').ToList();

var x= db.EMS_ENQUIRYREGISTRATION_MASTER.Where(s => codes.Contains(s.ENQUIRY_CODE)).ToList();