문제

변수 유형이있는 경우 IEnumerable<List<string>> LINQ 문 또는 람다 표현식이 있습니까? IEnumerable<string>?

도움이 되었습니까?

해결책

SelectMany -IE

        IEnumerable<List<string>> someList = ...;
        IEnumerable<string> all = someList.SelectMany(x => x);

그러면 Somelist의 각 항목에 대해 Lambda "x => x"를 사용하여 ienumerable을 얻습니다.u003CT> 내부 항목의 경우. 이 경우 각 "x"는 목록입니다.u003CT> 이미 ienumerable입니다u003CT> .

그런 다음 연속 블록으로 반환됩니다. 기본적으로 Selectmany는 (단순화)와 비슷합니다.

static IEnumerable<TResult> SelectMany<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TResult>> selector) {

    foreach(TSource item in source) {
      foreach(TResult result in selector(item)) {
        yield return result;
      }
    }
}

그것은 다소 단순화되지만.

다른 팁

어때

myStrings.SelectMany(x => x)

정확히 단일 메소드 호출은 아니지만 쓸 수 있어야합니다.

var concatenated = from list in lists from item in list select item;

여기서 '목록'은 당신입니다 IEnumerable<List<string>> 연결은 유형입니다 IEnumerable<string>.

(기술적으로 이것 ~이다 단일 메소드 호출 SelectMany - 개막식이 의미하는 것처럼 보이지 않습니다. 누군가 혼란스러워 지거나 댓글을 달았을 경우를 대비하여 명확하게하고 싶었습니다.

간단한 방법을 만드십시오. LINQ가 필요 없음 :

IEnumerable<string> GetStrings(IEnumerable<List<string>> lists)
{
   foreach (List<string> list in lists)
   foreach (string item in list)
   {
     yield return item;
   }
 }

LINQ 표현 사용 ...

IEnumerable<string> myList = from a in (from b in myBigList
                                        select b)
                             select a;

... 잘 작동합니다. :-)

b 할 것입니다 IEnumerable<string> 그리고 a a string.

다음은 또 다른 LINQ 쿼리 이해력이 있습니다.

IEnumerable<string> myStrings =
  from a in mySource
  from b in a
  select b;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top