2012-08-27 4 views
0

을 기다리고 메신저 것은 내가 대신LINQ 반환 형식/값은 무엇

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Text.RegularExpressions.Match,System.String] 

당신이 날 어떻게 PLS 도와 드릴까요,이 라인

drpdf["meno"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => c.Groups["meno"].Value); 
drpdf["info"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => Regex.Replace(c.Groups["zvysok"].Value, @"^,\s?", string.Empty)); 

는 늘 내가 원하는 DataRow를 값으로 저장을 execuse 때 아니다 반환 값을 읽을 수있는 형식으로 선택/변환 하시겠습니까? 어쨌든 고마워. Ondro

답변

1

LINQ 쿼리는 Select을 사용하므로 IEnumerable<T>이 반환됩니다. 당신이 당신의 LINQ 쿼리의 결과를 원하고 정확히 하나 개의 결과를 기대하는 경우, .Single()을 추가

drpdf["meno"] = matches.Cast<Match>() 
         .Where(c => c.Groups["ID"].Value == i.ToString()) 
         .Select(c => c.Groups["meno"].Value) 
         .Single(); 

을 다른 한편으로는, 쿼리가 여러 결과를 가질 수 있다면, 당신은 첫 번째 결과를 취할 대신 .First()를 사용한다 . 그러나 그 시점에서 시나리오는 무엇이며 캡처하려고하는 내용에 달려 있습니다. 같은

+0

big thx, 나 혼자서 찾아야합니다. –

0

뭔가 :

matches.Cast<Match>() 
     .Where(c => c.Groups["ID"].Value == i.ToString()) 
     .Select(c => c.Groups["meno"].Value) 
     .FirstOrDefault(); // this expression will evaluate the linq 
          // expression, so you get the string you want 

주의 사항 : 널 (null)이 실제로 당신의 상황에 유효한 값입니다 경우에만 FirstOrDefault 또는 SingleOrDefault를 사용해야합니다. (@ 다니엘 Hilgarth에 의해 말했다처럼).

null이 유효한 결과를 가지지 않고 빈 문자열을 원하는 경우에, 표현에 ?? String.Empty를 추가 : 쿼리의

matches 
    ... 
    .FirstOrDefault() ?? String.Empty; 
+0

참고 : 'null'이 실제로 컨텍스트에서 유효한 값인 경우에만 'FirstOrDefault' 또는'SingleOrDefault'를 사용해야합니다. –

0

결과는 열거 개체입니다. 이것들에 ToString()을 호출한다고해서 이미 눈치 챘을 때 의미있는 문자열 표현이되는 것은 아닙니다. 표시에 적합한 문자열을 생성해야합니다. 당신이 하나를 선택 Single()를 사용하여 하나의 결과를 선택하도록 그렇지 않으면

var menos = matches.Cast<Match>() 
        .Where(c => c.Groups["ID"].Value == i.ToString()) 
        .Select(c => c.Groups["meno"].Value); 
drpdf["meno"] = String.Join(", ", menos); 

: 당신은 단순히 쉼표로 구분 된 목록 등의 내용을 표시하려면

, 당신은이 작업을 수행 할 String.Join()을 사용할 수 있습니다 문자열 결과.