对lambda表达式中当前对象的引用

本文关键字:对象 引用 lambda 表达式 | 更新日期: 2023-09-27 18:21:16

是否可以在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 
                })

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

对lambda表达式中当前对象的引用

如果切换到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 
}

您可以使用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