법인

2012-12-12 6 views
0

에 LINQ에 자식 값을 취득 나는 형식법인

내가 Linq에를 사용하여 라인에 자식 값을 가져 할
 -- Parent1 
----Childs 
------key - aa 
------value - new 
----Childs 
------key - bb 
------value - old 
-- Parent2 
----Childs 
------key - cc 
------value - test 
----Childs 
------key - dd 
------value - tesst

아래에서 결과를 반환 LINQ 쿼리가 있습니다. 현재 내가 값을 얻을 수 있지만, 코드의 두 줄을 내가 그것을

var firstPoint = SeriesList.Select(i => i.Childs.Where(j => j.key == "aa")) 
          .FirstOrDefault(); 
decimal index = firstPoint.Select(d => d.Value) 
          .FirstOrDefault(); 
+0

'FirstOrDefault()'를 사용하고 있으므로 두 줄로하지 않고 그들 사이에 null 체크를하면, 당신은'NullReferenceException'을 얻을 위험이있다. 이 경우에 예외가 던져지 길 원한다면 대신'First()'를 사용하십시오. – Bobson

답변

2
decimal index = SeriesList.Select(i => i.Childs.Where(j => j.key == "aa")) 
    .FirstOrDefault() 
    .FirstOrDefault().Value; 
1
var firstPoint = SeriesList.Select(i => i.Childs.Where(j => j.key == "aa")).FirstOrDefault().Value; 
+0

'System.Collections.Generic.IEnumerable '오류 'System.Collections.Generic.IEnumerable ' –

+0

형식의 첫 번째 인수를 수락 '확장'및 '값'에 대한 정의가 포함되어 있지 않습니다. FirstOrDefault(). (d => d.Value) .FirstOrDefault()를 선택합니다. var firstPoint = SeriesList.Select (i => i.Childs.Where (j => j.key == "aa")) ;'? – sed

1
decimal index = SeriesList.SelectMany(p => p.Childs) 
          .FirstOrDefault(c => c.key == "aa").Value; 

을 좋아하지 않는 그러나 명심, 열쇠를 가진 그 아이가 목록에 있어야합니다, 그렇지 않으면 예외가 발생합니다. 먼저 자식을 찾는 것이 더 좋을 것입니다. 자식이 존재한다면 값을 얻으십시오 :

Childs child = SeriesList.SelectMany(p => p.Childs) 
          .FirstOrDefault(c => c.key == "aa"); 
if (child != null) 
    index = child.Value; 
+0

이것은 기능 코드와 다릅니다. 그의 부모가 첫 번째 부모를 얻은 다음 첫 번째 자식이 X 조건을 충족하면 각 부모로부터 모든 자식을 얻은 다음 첫 번째 자식이 조건을 충족시킵니다. 그가 원하는 것일 수도 있지만, 그렇지 않을 수도 있습니다. – Servy

+0

@Servy는 동의합니다. OP가 필요한 부분을 찾을 수있는 한 가지 방법이 있습니다. 실제로 데이터 구조가 분명하지 않습니다. 각 부모에 여러 Childs 요소가 있는지 여부는 –

+0

입니다. 그의 예는 각 부모에 대해 두 명의 자식을 나열합니다. – Servy

관련 문제