2012-07-30 3 views
2

이 코드 조각을 LINQ가 foreach보다 훨씬 빠르기 때문에 LINQ 쿼리로 변환하려고합니다. 나는 그 일을하는 법을 모르고, 기본적으로 간단한 LINQ 쿼리를 할 수 있습니다.foreach 루프 대신 LINQ 쿼리 사용

내가하려는 것은 사전에 특정 필드를 가져 오는 것입니다.

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

왜 당신이 Linq에 foreach는보다 빠르고이라고 생각합니까 여기

는 구현입니까? 이 코드를 최적화해야합니까? –

+2

LINQ가 for-each보다 빠르거나 빠르지 않습니다. – Anirudha

+1

예 코드를 최적화해야합니다 –

답변

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

3

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

+0

'dic [ "FIELD"] .ToString()'은 사전에 객체 유형의 값이 있기 때문에 원본 코드와 같습니다. 그렇지 않으면 유용하지 않은 참조 별 비교를 수행합니다. – Zarat

2

LINQ는 거의 빠른 foreach보다하지,하지만 여기에 범위 밖이다.

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