나는 사이의 차이를 검색했습니다 Select
및 SelectMany
하지만 적절한 답을 찾을 수 없어. LINQ To SQL을 사용할 때의 차이점을 알아야하지만 내가 찾은 것은 표준 배열 예입니다.
누군가 LINQ To SQL 예제를 제공 할 수 있습니까?
답변
SelectMany
목록 목록을 반환하는 쿼리를 병합합니다. 예를 들어
public class PhoneNumber
{
public string Number { get; set; }
}
public class Person
{
public IEnumerable<PhoneNumber> PhoneNumbers { get; set; }
public string Name { get; set; }
}
IEnumerable<Person> people = new List<Person>();
// Select gets a list of lists of phone numbers
IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);
// SelectMany flattens it to just a list of phone numbers.
IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);
// And to include data from the parent in the result:
// pass an expression to the second parameter (resultSelector) in the overload:
var directory = people
.SelectMany(p => p.PhoneNumbers,
(parent, child) => new { parent.Name, child.Number });
답변
많은 제품이 교차 제품을 취하는 SQL의 교차 조인 작업 과 유사 합니다.
예를 들어
Set A={a,b,c}
Set B={x,y}
많은 세트를 사용하여 다음 세트를 얻을 수 있습니다
{ (x,a) , (x,b) , (x,c) , (y,a) , (y,b) , (y,c) }
여기서 우리는 세트 A와 세트 B의 요소로 만들 수있는 모든 가능한 조합을 취합니다.
시도 할 수있는 LINQ 예제는 다음과 같습니다.
List<string> animals = new List<string>() { "cat", "dog", "donkey" };
List<int> number = new List<int>() { 10, 20 };
var mix = number.SelectMany(num => animals, (n, a) => new { n, a });
믹스는 평평한 구조에서 다음과 같은 요소를 갖습니다.
{(10,cat), (10,dog), (10,donkey), (20,cat), (20,dog), (20,donkey)}
답변
var players = db.SoccerTeams.Where(c => c.Country == "Spain")
.SelectMany(c => c.players);
foreach(var player in players)
{
Console.WriteLine(player.LastName);
}
- 드 게아
- 알바
- 코스타
- 별장
- 부 스켓
…
답변
SelectMany()
다른 방법으로 초 Select()
또는 루프가 필요한 방식으로 다차원 시퀀스를 축소 할 수 있습니다 .
이 블로그 게시물에 대한 자세한 내용 .
답변
에 여러 가지 과부하가 SelectMany
있습니다. 그 중 하나를 사용하면 계층을 순회하면서 부모와 자식 사이의 관계를 추적 할 수 있습니다.
예 : 다음 구조를 가지고 있다고 가정하십시오 League -> Teams -> Player
.
플랫 플레이어 모음을 쉽게 반환 할 수 있습니다. 그러나 플레이어가 속한 팀에 대한 참조가 손실 될 수 있습니다.
다행히도 그러한 목적을위한 과부하가 있습니다.
var teamsAndTheirLeagues =
from helper in leagues.SelectMany
( l => l.Teams
, ( league, team ) => new { league, team } )
where helper.team.Players.Count > 2
&& helper.league.Teams.Count < 10
select new
{ LeagueID = helper.league.ID
, Team = helper.team
};
이전 예는 Dan의 IK 블로그 에서 가져 왔습니다 . 나는 당신이 그것을 볼 것을 강력히 권장합니다.
답변
SelectMany
조인 바로 가기처럼 작동한다고 이해 합니다.
그래서 당신은 할 수 있습니다 :
var orders = customers
.Where(c => c.CustomerName == "Acme")
.SelectMany(c => c.Orders);
답변
선택은 소스 요소에서 결과 요소로의 간단한 일대일 투영입니다. Select- Many는 쿼리 식에 여러 from 절이있을 때 사용됩니다. 원래 시퀀스의 각 요소는 새 시퀀스를 생성하는 데 사용됩니다.