2017-06-13 46 views
-1

我試圖將值賦給Select語句,並且想要將Date轉換爲特定的字符串格式。將值賦給linq表達式選擇語句

我想我現有Date轉換爲DateISO 8601 standard format.

IEnumerable<message> messageObj= // list of message from DB; 
messageObj.Select(x => x.created_at= DateTime.Parse(x.created_at.ToString("s", System.Globalization.CultureInfo.InvariantCulture))).ToList(); 

我無法使用ToStringcreated_atlinq lambda expression

我該如何做到這一點?

+1

您剛剛分配了'messageObj'來先前刪除一行。這是實際的代碼嗎? – user3185569

+2

'DateTime'沒有格式,你在那裏做什麼?將現有的DateTime轉換爲字符串,然後嘗試將其解析回DateTime。所以最好不要操作。 –

+0

更新了問題 –

回答

1

Linq是專爲查詢,(這是什麼Q代表),而不是更新。您的收藏中修改一個項目是其的壞主意,使用經典的for循環

List<message> messageObj= // list of message from DB; 
for(int i = 0; i < messageObj.Count; i++) 
{ 
    messageObj[i].created_at = ...; 
} 

但是一個DateTime只是一個數字(從給定開始毫秒),併爲此沒有格式。你想要的是一個格式化的字符串 - 表示你的日期。要做到這一點,你需要第二個變量或成員,例如formatDate類型string

messageObj[i].formatDate = messageObj[i].created_at.ToString("s", System.Globalization.CultureInfo.InvariantCulture) 
0

我想你應該澄清你的問題 - 你想要麼:

  1. 從每@TimSchmelter's answer
  2. 您的數據庫中檢索日期列表檢索消息本身(所以你可以然後將它們全部或部分地格式化,然後格式化爲全部或部分@HimBromBeere's answer

首先,基本上Tim已經說過不要以爲「S」格式需要一種文化,因爲它是一個標準):

// materialize with ToList 
var datesOnly = YourGetMessagesFrom(DB).Select(m => m.created_at.ToString("s")).ToList(); 

還要注意,在你原來的問題你提到開始與IEnumerable<message>;它(以及可能更合適的IQueryable<message>)可能會導致延遲加載,這意味着您的ORM實際上可以進行數據庫調用來獲取格式化的日期,而不是使用已檢索的消息對象。