linq를 사용하여 고유 선택
나는 수업 목록을 가지고 있습니다.
public class LinqTest
{
public int id { get; set; }
public string value { get; set; }
}
List<LinqTest> myList = new List<LinqTest>();
myList.Add(new LinqTest() { id = 1, value = "a" });
myList.Add(new LinqTest() { id = 1, value = "b" });
myList.Add(new LinqTest() { id = 2, value = "c" });
저는 그 목록에서 고유 ID만 선택하면 됩니다.i, 내 결과 목록은 다음만 포함해야 합니다.
[{id=1,value="a"},{ id = 2, value = "c" }]
linq로 이걸 어떻게 하나요?
편집
입력,
id value
1 a
1 b
2 c
3 d
3 e
출력은 다음과 같아야 합니다.
id value
1 a
2 c
3 d
i, 의 반복이 있을 경우id결과는 첫 번째 항목만 사용해야 합니다.
myList.GroupBy(test => test.id)
.Select(grp => grp.First());
편집: 가져올 때IEnumerable<>의 상태가.List<>많은 사람들에게 미스터리처럼 보입니다. 당신은 간단하게 다음과 같이 쓸 수 있습니다.
var result = myList.GroupBy(test => test.id)
.Select(grp => grp.First())
.ToList();
하지만 종종 한 명은 더 나은 방법으로 작업합니다.IEnumerable보다는IList위의 Linq는 게으르게 평가됩니다. 열거형이 반복될 때까지 실제로 모든 작업을 수행하지 않습니다.전화할 때ToList실제로 모든 작업을 사전에 완료하도록 강제하는 전체 열거형 워크입니다. (그리고 열거형이 무한히 길면 시간이 조금 걸릴 수 있습니다.)
이 충고의 반대되는 점은 당신이 그러한 것을 열거할 때마다IEnumerable그것을 평가하는 일은 다시 해야 합니다.따라서 각 사례에 대해 게으르게 평가된 작업을 수행하는 것이 더 나은지 여부를 결정해야 합니다.IEnumerable또는 그것을 실현하기 위해.List,Set,Dictionary뭐 그런 거.
사용할 수 있는 더 많은 링크 사용DistinctBy:
myList.DistinctBy(x => x.id);
그렇지 않으면 그룹을 사용할 수 있습니다.
myList.GroupBy(x => x.id)
.Select(g => g.First());
오버라이드해야 합니다.Equals그리고.GetHashCode의미 있게, 이 경우 ID를 비교합니다.
public class LinqTest
{
public int id { get; set; }
public string value { get; set; }
public override bool Equals(object obj)
{
LinqTest obj2 = obj as LinqTest;
if (obj2 == null) return false;
return id == obj2.id;
}
public override int GetHashCode()
{
return id;
}
}
이제 사용할 수 있습니다.Distinct:
List<LinqTest> uniqueIDs = myList.Distinct().ToList();
myList.GroupBy(i => i.id).Select(group => group.First())
언급URL : https://stackoverflow.com/questions/19406242/select-distinct-using-linq
'programing' 카테고리의 다른 글
| nvm을 사용하여 npm 버전을 변경하려면 어떻게 해야 합니까? (0) | 2023.05.08 |
|---|---|
| 클릭 이벤트가 동적으로 생성된 요소에서 작동하지 않음 (0) | 2023.05.08 |
| Interlocked의 과부하가 없는 이유는 무엇입니까?Double을 매개 변수로 허용하는 추가? (0) | 2023.05.08 |
| 날짜 시간 대 날짜 시간 오프셋 (0) | 2023.05.08 |
| 디렉터리를 반복적으로 순환하여 특정 확장명의 파일을 삭제하는 방법 (0) | 2023.05.08 |