2016-05-30 63 views
0

我在我的數據庫中有預訂表,其中一列是booking_date_time。如何更新多個記錄的時間部分?例如,如果我有5條記錄的日期不同,我想保留這些日期,但將時間設置爲上午10點。 下面是我正在使用的代碼,但這會爲所有對象設置相同的日期。我希望能避免檢索對象的列表,並通過他們的迭代和更新他們在同一時間.net linq更新時間多個記錄的日期時間的一部分

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:2016年1月1日08:00

booking_id:2 booking_recurrence_id:1 booking_date_time:2016年2月1日 08:00

booking_id:3 booking_recurrence_id:1個booking_date_time:2016年3月1日08:00

我要與時俱進更新至09:00,所以我期待的結果應該是

booking_id:1 booking_recurrence_id:1 booking_date_time:2016年1月1日 09:00

booking_id:2 booking_recurrence_id:1個booking_date_time:2016年2月1日09:00

booking_id:3 booking_recurrence_id:1 booking_date_time:2016年3月1日09:00

+0

你能更具體,並提供輸入數據和預期的輸出沒有測試? –

+0

[DateTime](https://msdn.microsoft.com/en-us/library/system.datetime%28v=vs.110%29.aspx)包含'AddHours'方法。用它! –

回答

1

使用EF(或任何其他ORM)進行更新的方法是檢索該對象,將其更新並提交更改。

有多個擴展可能會批量更新,但它可能無法在您的情況下工作,因爲您需要根據每行的值進行更新,而不是更新讓我們說所有行爲一些常數值。

但是,你正在做一個提交,你也可以做1選擇你的情況。但是這會根據對象的數量生成許多更新語句。

  1. 選擇你想更新到本地(1個往返)
  2. 循環對象的名單上的recrods。 (不訪問數據庫)
  3. 更新每個對象。 (沒有車次到數據庫)
  4. 提交更改(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); 
0

如果您使用的是實體框架,您可以查看Entity Framework Extended Library。批量更新功能 - 這是你需要的。每行都可以根據其值進行更新。

0

試試這個,雖然

bookingToUpdate.ToList().ForEach(m => {DateTime.Parse(m.booking_date_time.ToShortDateString() + " 09:00 AM")}) 
+0

注意!這將所有數據從本地檢索到內存,然後更新對象。應該避免一般情況。 – user3185569

+0

@ user3185569任何參考...想看看替代品 –

相關問題