linq를 사용하여 구별 선택
이 질문에는 이미 답변이 있습니다.
- LINQ : 고유 값 7 답변
수업 목록이 있습니다
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 만 선택하면됩니다. 즉, 내 결과 목록에는
[{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
즉,의 반복이있는 경우 id
결과는 첫 번째 항목 만 수행해야합니다.
myList.GroupBy(test => test.id)
.Select(grp => grp.First());
편집 : 이것을 많은 사람들에게 미스터리 IEnumerable<>
로 만드는 List<>
것처럼 간단하게 작성할 수 있습니다.
var result = myList.GroupBy(test => test.id)
.Select(grp => grp.First())
.ToList();
그러나 위의 Linq가 느리게 평가 되는 IEnumerable
것보다 오히려 작업하는 것이 더 낫습니다 IList
. 열거 형이 반복 될 때까지 실제로 모든 작업을 수행하지는 않습니다. 당신이 전화 ToList
하면 실제로 모든 작업이 선행되도록 강제로 열거 할 수 있는 전체를 걸어갑니다. 열거 형이 무한히 길면 시간이 조금 걸릴 수 있습니다.
이 조언의 IEnumerable
단점은 평가할 작업을 열거 할 때마다 새로 작성해야한다는 것입니다. 당신은이 게으르게 평가와 함께 작업하는 것이 좋습니다 여부를 각각의 경우에 대해 결정해야합니다 그래서 IEnumerable
나에 그것을 실현하기 위해 List
, Set
, Dictionary
또는 이것 저것.
morelinq 를 사용 하면 다음을 사용할 수 있습니다 DistinctBy
.
myList.DistinctBy(x => x.id);
그렇지 않으면 그룹을 사용할 수 있습니다.
myList.GroupBy(x => x.id)
.Select(g => g.First());
이 경우 ID를 비교하려면 무시 Equals
하고 GetHashCode
의미 가 있어야합니다 .
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
'IT story' 카테고리의 다른 글
Rspec :“array.should == another_array”이지만 순서는 신경 쓰지 않습니다 (0) | 2020.04.16 |
---|---|
라 라벨 5-장인 씨 [ReflectionException] Class SongsTableSeeder가 없습니다 (0) | 2020.04.16 |
JavaScript / JQuery : $ (window) .resize 크기 조정이 완료된 후 실행하는 방법은 무엇입니까? (0) | 2020.04.16 |
너무 많은 매개 변수가 있습니까? (0) | 2020.04.16 |
Laravel 5 : 블레이드를 사용하여 HTML 표시 (0) | 2020.04.16 |