2013-07-04 52 views
3

是否有可能在Linq中的lambda表達式的Select語句中引用當前對象的屬性?在lambda表達式中引用當前對象

實施例:

... 
.Select(s => new { 
        Date = s.Date.ToString("yyyy-MM-dd"), 
        Time = s.Time.ToString("h':'m"), 
        DateTime = s.Date.ToString("yyyy/MM/dd") +"-"+ s.Time.ToString("h':'m"), 
        Temperature = s.Temperature, 
        Humidity = s.Humidity, 
        Device = s.Device.Name, 
        Message = s.Message 
       }) 

我想通過參考先前定義DateTime性質的雙呼叫取代到ToString功能。

回答

4

可以使用lambda函數,而不是一個lambda表達式:

.Select(s => { 
    var d = s.Date; 
    var t = s.Time; 
    return new { 
       Date = d.ToString("yyyy-MM-dd"), 
       Time = t.ToString("h':'m"), 
       DateTime = d.ToString("yyyy/MM/dd") +"-"+ t.ToString("h':'m"), 
       // ... 
      }) 

注意額外的一套{ ... }括號,(讓你有到拉姆達的局部變量)和return

6

如果切換到LINQ查詢語法(而不是方法語法),則可以使用let keyword「存儲子表達式的結果以便在後續子句中使用它」。

from s in source 
let dateStr = s.Date.ToString("yyyy-MM-dd") 
let timeStr = s.Time.ToString("h':'m") 
select new { 
    Date = dateStr, 
    Time = timeStr, 
    DateTime = dateStr + "-" + timeStr, 
    Temperature = s.Temperature, 
    Humidity = s.Humidity, 
    Device = s.Device.Name, 
    Message = s.Message 
} 
+0

這段代碼讓我想起了SML代碼! – Star

+0

@Star:確實; LINQ與功能語言有很強的關聯。 – Douglas