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 |