문제
변수 유형이있는 경우 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;
제휴하지 않습니다 StackOverflow