3

是否可以在 Linq 的 lambda 表达式的 Select 语句中引用当前对象的属性?

例子:

...
.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 
                })

我想ToString通过引用之前定义的DateTime属性来替换对函数的双重调用。

4

2 回答 2

6

如果切换到 LINQ 查询语法(而不是方法语法),则可以使用let关键字“存储子表达式的结果,以便在后续子句中使用它”。

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 
}
于 2013-07-04T17:21:07.473 回答
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"),
                // ...
            })

请注意额外的一组{...}大括号,(允许您拥有 lambda 的本地变量)和return.

于 2013-07-04T17:23:56.830 回答