반응형
Linq를 사용하여 객체 목록을 새로운 그룹화 된 객체 목록으로 그룹화
Linq에서 이것이 가능한지 모르겠지만 여기에 있습니다 ...
나는 물건을 가지고있다 :
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public int GroupID { get; set; }
}
다음과 같은 목록을 반환합니다.
List<User> userList = new List<User>();
userList.Add( new User { UserID = 1, UserName = "UserOne", GroupID = 1 } );
userList.Add( new User { UserID = 2, UserName = "UserTwo", GroupID = 1 } );
userList.Add( new User { UserID = 3, UserName = "UserThree", GroupID = 2 } );
userList.Add( new User { UserID = 4, UserName = "UserFour", GroupID = 1 } );
userList.Add( new User { UserID = 5, UserName = "UserFive", GroupID = 3 } );
userList.Add( new User { UserID = 6, UserName = "UserSix", GroupID = 3 } );
위의 목록에서 Linq 쿼리를 실행하여 모든 사용자를 GroupID로 그룹화하고 싶습니다. 따라서 출력은 사용자를 포함하는 사용자 목록의 목록이됩니다 (그렇다면 의미가 있습니까?). 다음과 같은 것 :
GroupedUserList
UserList
UserID = 1, UserName = "UserOne", GroupID = 1
UserID = 2, UserName = "UserTwo", GroupID = 1
UserID = 4, UserName = "UserFour", GroupID = 1
UserList
UserID = 3, UserName = "UserThree", GroupID = 2
UserList
UserID = 5, UserName = "UserFive", GroupID = 3
UserID = 6, UserName = "UserSix", GroupID = 3
groupby linq 절을 사용하려고 시도했지만 키 목록을 반환하는 것으로 보이며 키 그룹이 올바르게 그룹화되지 않은 것 같습니다.
var groupedCustomerList = userList.GroupBy( u => u.GroupID ).ToList();
var groupedCustomerList = userList
.GroupBy(u => u.GroupID)
.Select(grp => grp.ToList())
.ToList();
그룹 명세서 는 그룹 ID별로 그룹화됩니다. 예를 들어, 다음과 같이 쓰는 경우 :
foreach (var group in groupedCustomerList)
{
Console.WriteLine("Group {0}", group.Key);
foreach (var user in group)
{
Console.WriteLine(" {0}", user.UserName);
}
}
잘 작동합니다. 각 그룹 에는 키가 있지만 IGrouping<TKey, TElement>
그룹의 멤버를 반복 할 수있는 컬렉션 인 키도 포함합니다 . Lee가 언급했듯이 실제로 원하는 경우 각 그룹을 목록으로 변환 할 수 있지만 위의 코드에 따라 그룹을 반복하면 실제로 이점이 없습니다.
유형
public class KeyValue
{
public string KeyCol { get; set; }
public string ValueCol { get; set; }
}
수집
var wordList = new Model.DTO.KeyValue[] {
new Model.DTO.KeyValue {KeyCol="key1", ValueCol="value1" },
new Model.DTO.KeyValue {KeyCol="key2", ValueCol="value1" },
new Model.DTO.KeyValue {KeyCol="key3", ValueCol="value2" },
new Model.DTO.KeyValue {KeyCol="key4", ValueCol="value2" },
new Model.DTO.KeyValue {KeyCol="key5", ValueCol="value3" },
new Model.DTO.KeyValue {KeyCol="key6", ValueCol="value4" }
};
linq 쿼리는 아래와 같습니다
var query =from m in wordList group m.KeyCol by m.ValueCol into g
select new { Name = g.Key, KeyCols = g.ToList() };
또는 아래와 같은 목록 대신 배열
var query =from m in wordList group m.KeyCol by m.ValueCol into g
select new { Name = g.Key, KeyCols = g.ToList().ToArray<string>() };
반응형
'IT박스' 카테고리의 다른 글
“app-release.apk”이 기본 생성 된 APK 이름을 변경하는 방법 (0) | 2020.07.08 |
---|---|
이 코드 스 니펫에서 cout이“2 + 3 = 15”를 인쇄하는 이유는 무엇입니까? (0) | 2020.07.08 |
Android 앱이 설치되지 않았습니다. (0) | 2020.07.08 |
TSQL을 사용하여 데이터베이스의 SQL Server 버전을 어떻게 확인합니까? (0) | 2020.07.08 |
재정의 된 메소드가 리턴 유형이 다를 수 있습니까? (0) | 2020.07.07 |