我的数据库中有一个预订表,其中一列是booking_date_time。如何更新多个记录的时间部分?例如,如果我有5条记录具有不同的日期,我想保留这些日期,但是将时间设置为上午10点。下面是我正在使用的代码,但这将为所有对象设置相同的日期。我希望避免检索对象列表并遍历它们并一次更新一个
booking bookingToUpdate = db.bookings.Where(a => a.booking_recurrence_id == bk.booking_recurrence_id).SingleOrDefault();
bookingToUpdate.booking_date_time = bk.booking_date_time;
db.Entry(bookingToUpdate).State = System.Data.Entity.EntityState.Modified;
retVal = db.SaveChanges() > 0;
输入的数据是一个预订记录(bk)。它包含唯一的booking_id。它还包含一个booking_recurrence_id,它将多个预订链接在一起。
说我有以下几点:
booking_id:1 booking_recurrence_id:1 booking_date_time:1/1/2016 08:00
booking_id:2 booking_recurrence_id:1 booking_date_time:2/1/2016 08:00
booking_id:3 booking_recurrence_id:1 booking_date_time:3/1/2016 08:00
我想将时间更新为09:00,所以我的预期结果应该是
booking_id:1 booking_recurrence_id:1 booking_date_time:1/1/2016 09:00
booking_id:2 booking_recurrence_id:1 booking_date_time:2/1/2016 09:00
booking_id:3 booking_recurrence_id:1 booking_date_time:3/1/2016 09:00
使用EF(或任何其他ORM)进行更新的方法是检索对象,对其进行更新,然后提交更改。
有多个扩展名可以进行批处理更新,但由于您需要根据每一行的值进行更新,而不是进行更新,因此可以将所有行都更新为某个恒定值,这可能不适用于您的情况。
但是,您要进行一次提交,也可以根据自己的情况进行1选择。但是,这将基于对象的数量生成许多更新语句。
我认为您无法生成单个Linq To SQL语句来执行此操作。但是您可以使用传统的T-SQL查询。
List<int> ids = new List<int>(); // your ids here.
string commaDelimitedIds = String.Join("," ids);
string query = "UPDATE booking "
+ "SET booking_date_time = DATEADD(HOUR, 10, CONVERT(DATETIME2(7), CONVERT(DATE, booking_date_time))) "
+ "WHERE booking_recurrence_id IN (" + commaDelimitedIds + ")";
db.Database.SqlQuery(query);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句