我正在为加拿大石油营地开展紧急监测工具,所以下面的例子非常简单。不过,我认为这一点很重要。基于在它之前设置的另一个值,在lambda表达式中设置一个值?
我的目标是避免代码重复并清理我的lambda类型转换。
例如,而不是这样的:
var dto = results.Select(x => new DTO()
{
Unoccupied = !(x.RoomStatusType == "Checked In" || x.RoomStatusType == "No Sleep"),
SwipeTime = x.RoomStatusType == "Checked In" || x.RoomStatusType == "No Sleep" ? x.SwipeTime : null,
Mustered = (x.RoomStatusType == "Checked In" || x.RoomStatusType == "No Sleep") && x.SwipeTime != null
}).ToList();
我想做到这一点:
var dto = results.Select(x => new DTO()
{
Unoccupied = !(x.RoomStatusType == "Checked In" || x.RoomStatusType == "No Sleep"),
SwipeTime = Unoccupied ? null : x.SwipeTime,
Mustered = !Unoccupied && SwipeTime != null
}).ToList();
然而,在后者的实施方式我得到的错误,指出
名称在当前上下文中{{'Unoccupied'或'SwypeTime'}分别不存在 。
我觉得这个莫名其妙,因为两者似乎都存在于lambda表达式的上下文中。在诸如“this.Unoccupied”或“dto.Unoccupied”之前添加前缀当然没有用处。这真的让我很失望!
你可以使用'let',LINQ使用起来更容易。 – leppie
我的上帝堆栈溢出已经变快了!我已经准备好发布它并开始进行其他工作,但是它实际上是实时解决的。 – Methodician