这里我将ENQUIRY_CODE的Multipul值设为1,2,3
git reset --hard
git gc --aggressive
git prune
git clean -df
请帮助我我犯错的地方
答案 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();