2012-07-30 103 views
2

我想將這段代碼轉換爲LINQ查詢,因爲LINQ比foreach快得多。 我不知道如何去做,可以做基本簡單的LINQ查詢。使用LINQ查詢而不是foreach循環

我想要做的是獲得字典中的特定字段。

Dictionary<string, object> fieldLayout = null; 
foreach (Dictionary<string, object> dic in pageLayout) 
{ 
    if (dic[ "FIELD" ].ToString() == "123") 
    { 
     fieldLayout = dic; 
     break; 
    } 
} 
+2

爲什麼你認爲LINQ的比的foreach快?你需要優化這個代碼嗎? – 2012-07-30 11:45:25

+2

LINQ不是更快或比每個更慢.. – Anirudha 2012-07-30 11:45:55

+1

是的,我需要優化代碼 – 2012-07-30 11:49:22

回答

2

首先,LINQ不會比foreach循環更快。

下面是執行:

Dictionary<string, object> fieldLayout = pageLayout.Where(x => x["FIELD"].ToString() == "123").FirstOrDefault(); 

甚至更​​好:

Dictionary<string, object> fieldLayout = pageLayout.FirstOrDefault(x => x["FIELD"].ToString() == "123"); 
+1

我建議只留下第二名。 – abatishchev 2012-07-30 11:48:50

3

fieldLayout = pageLayout.FirstOrDefault(dic => dic["FIELD"].ToString() == "213");

+0

應該是'dic [「FIELD」]。ToString()'就像在原始代碼中一樣,因爲字典的值是object類型的值。否則,你會做一個沒有用的參考比較。 – Zarat 2012-07-30 11:45:59

2

LINQ幾乎快於foreach,但這裏是這樣的範圍之內。

var fieldLayout = pageLayout.FirstOrDefault(pl => pl["FIELD"].ToString() == "123");