2014-10-03 79 views
-1

,看一下下面的例子:查找與LINQ和lambda表達式的元素:但不工作

第一個解決方案,使用foreach,非常有效和容易。但我試圖用Linq編寫它,並且我無法實現這個結果。我做了一些嘗試,但沒有人成功。

我期望找到一個元素。

問題不在於運行時:我不太瞭解Linq sintax,所以我不知道如何獲取名爲PlacedSelection的元素(foreach結構闡明瞭我在哪裏尋找它)。相反,在我的努力我能得到PlacedCategory元素..但我並不需要這個..

PlacedSelection ActualSelection = null; 

foreach (var placedCategory in Model.Coupon.Categories) 
{ 
    foreach (PlacedSelection placedSelection in placedCategory.Value.Selections) 
    { 
     var pp = placedSelection.EventId; 
     if (pp == Model.EventId) 
     { 
      ActualSelection = placedSelection; 
      break; 
     } 
    } 
} 
//IEnumerable<KeyValuePair<string, PlacedCategory>> p = Model.Coupon.Categories(c => c.Value.Selections.Any(s=> s.EventId == Model.EventId)); 
+0

那麼*發生了什麼?你說你沒有成功,但你沒有說出了什麼問題。如果你能提供一個簡短但完整的程序來證明問題,說實話,這真的很有幫助。 – 2014-10-03 09:50:44

+0

我將編輯問題,但問題不在運行時。問題是,我不太瞭解Linq sintax,所以我不知道如何獲得名爲PlacedSelection的元素(foreach結構明確了我在哪裏尋找它) – Revious 2014-10-03 09:52:18

回答

3

它看起來像你想:

PlacedSelection actualSelection = Model.Coupon.Categories 
    .SelectMany(cat => cat.Value.Selections) 
    .FirstOrDefault(selection => selection.EventId == Model.EventId); 

Any會,如果你試圖使用找到類別,但您試圖通過外觀找到選擇

+0

Thanks!你可以用Any來添加一個例子嗎? – Revious 2014-10-03 09:54:32

+1

@上一頁:不,因爲「任何」在這裏都不合適。它不會實現你的'foreach'循環。如果你提供的目標是「任何」*都是合適的,那將是一個不同的問題 - 但你應該試圖解決你的問題,而不是試圖使用一種特定的方法。 – 2014-10-03 09:55:00