이 질문에는 이미 답변이 있습니다.
public class ConsolidatedChild
{
public string School { get; set; }
public string Friend { get; set; }
public string FavoriteColor { get; set; }
public List<Child> Children { get; set; }
}
public class Child
{
public string School { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Friend { get; set; }
public string Mother { get; set; }
public string FavoriteColor { get; set; }
}
위의 두 클래스가 주어지면 LINQ를 사용하여 목록에서 목록을 만들고 학교, 친구 및 FavoriteColor 속성으로 그룹화했습니다. LINQ를 사용하여이 작업을 수행 할 수 있습니까?
속성을 무시하십시오. 코드는 질문에 도움이되도록 작성되었습니다.
쉬운:
var consolidatedChildren =
from c in children
group c by new
{
c.School,
c.Friend,
c.FavoriteColor,
} into gcs
select new ConsolidatedChild()
{
School = gcs.Key.School,
Friend = gcs.Key.Friend,
FavoriteColor = gcs.Key.FavoriteColor,
Children = gcs.ToList(),
};
FavoriteColor
)는 의도적으로 - 합법적 인 구문이며 코드를 쉽게 리팩토링 할 수 있습니다. 사용의 선택gcs
오히려gc
그룹화 변수에 대해서도 역시 목적이있다. 이것은 그것이 "많은 그룹의 그룹"이라는 것을 나에게 보여준다. - Enigmativity
주어진 목록 :
var list = new List<Child>()
{
new Child()
{School = "School1", FavoriteColor = "blue", Friend = "Bob", Name = "John"},
new Child()
{School = "School2", FavoriteColor = "blue", Friend = "Bob", Name = "Pete"},
new Child()
{School = "School1", FavoriteColor = "blue", Friend = "Bob", Name = "Fred"},
new Child()
{School = "School2", FavoriteColor = "blue", Friend = "Fred", Name = "Bob"},
};
쿼리는 다음과 같습니다.
var newList = list.GroupBy(x => new {x.School, x.Friend, x.FavoriteColor})
.Select(y => new ConsolidatedChild()
{
FavoriteColor = y.Key.FavoriteColor,
Friend = y.Key.Friend,
School = y.Key.School,
Children = y.ToList()
}
);
테스트 코드 :
foreach(var item in newList)
{
Console.WriteLine("School: {0} FavouriteColor: {1} Friend: {2}", item.School,item.FavoriteColor,item.Friend);
foreach(var child in item.Children)
{
Console.WriteLine("\t Name: {0}", child.Name);
}
}
결과:
School: School1 FavouriteColor: blue Friend: Bob
Name: John
Name: Fred
School: School2 FavouriteColor: blue Friend: Bob
Name: Pete
School: School2 FavouriteColor: blue Friend: Fred
Name: Bob
x
변수 이름에 대한 선택이 아니라 일부를 혼동시킬 수 있습니다. 그것을 (으)로 변경하겠습니다.x
과y
그것은 그것을 차별화했다. - Jamiec