我正在爲加拿大石油營地開展緊急監測工具,所以下面的例子非常簡單。不過,我認爲這一點很重要。基於在它之前設置的另一個值,在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