2015-07-02 53 views
-2

我有一個LINQ表達式,它將UTC格式的Dateformat轉換爲用戶文化的日期格式。在C#中檢查NULL LINQ表達式

for (int i = 0; i < datexml.count ; i++) 
{ 
    if (datatype.ToLower() == "date") 
    { 
     myList.Select(c => { ((object[])(c))[i] = ConvertFromUTCDate(Convert.ToDateTime (((object[])(c))[i]), UserTimeZone); return c; }).ToList(); 
    } 
} 

某些倍的時間值(對象[])(C))[I]可以是空值或具有串或十進制如果該值被錯誤地存儲在DB中。

如何檢查值是否爲空並有日期,然後在此表達式中進行轉換。

+0

爲什麼'C'然後??? –

+0

我認爲通過嘗試使用linq你已經使自己的工作更加困難,你會更好的做一個非linq的替代方案,讓你錯誤處理適當和容易理解 – Sayse

+0

你可以告訴我們'myList'的類型? – Mivaweb

回答

3

爲了避免增加更多的複雜性,並能夠讀取和容易維護代碼,提取匿名方法,並使其從

命名方法

C => {((對象[] )([(object [])(c))[i]),UserTimeZone);} [i] = ConvertFromUTCDate(Convert.ToDateTime 返回c; }

public DateTime ConvertFromObjectToDate(object dbdate){ 
    if(dbdate is null || !(dbdate is DateTime))return DateTime.MinValue; 
    var result = ConvertFromUTCDate(Convert.ToDateTime (dbdate),UserTimeZone); 
    return result; 
} 

c => {((object[])(c))[i] = ConvertFromObjectToDate(((object[])(c))[i]);} 
+1

您也可以使用'myList.Cast ().Select(c => ConvertFromObjectToDate(c [i]))' –

+1

在OP的可怕linq中,它也將值設置爲'((object [])(c))[i]'.. – Eric

+0

修復@Eric。其實我只是試圖說明簡單的老方法可以比Linq + Anonyous Method更好。實際上並沒有給出一個完整的工作解 – n00b