테이블의 한 필드 만 기준으로 Linq에서 구별
Linq에서 .distinct를 사용하여 테이블의 한 필드를 기반으로 결과를 얻으려고합니다 (따라서 테이블에서 전체 복제 된 레코드가 필요하지 않음).
다음과 같이 distinct를 사용하여 기본 쿼리를 작성하는 것을 알고 있습니다.
var query = (from r in table1
orderby r.Text
select r).distinct();
하지만 r.text
중복되지 않은 결과가 필요합니다 .
이 시도:
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());
이렇게하면 테이블을 그룹화하고 Text
각 그룹의 첫 번째 행을 사용하여 Text
고유 한 행을 만듭니다.
MoreLinq에는 다음을 사용할 수 있는 DistinctBy 메소드가 있습니다.
그것은 당신이 할 수있게합니다 :
var results = table1.DistictBy(row => row.Text);
이 메소드의 구현 (인수 검증 부족)은 다음과 같습니다.
private static IEnumerable<TSource> DistinctByImpl<TSource, TKey>(IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
HashSet<TKey> knownKeys = new HashSet<TKey>(comparer);
foreach (TSource element in source)
{
if (knownKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
하지만 r.text가 복제되지 않은 결과가 필요합니다.
원하는 것처럼 들립니다.
table1.GroupBy(x => x.Text)
.Where(g => g.Count() == 1)
.Select(g => g.First());
이 Text
고유 한 행을 선택합니다 .
이 주제와 관련하여 많은 토론이 있습니다.
당신은 그들 중 하나를 찾을 수 있습니다 여기에 :
가장 인기있는 제안 중 하나는 @Servy가 지적한 것처럼 람다 식을 매개 변수로 사용하는 Distinct 메서드입니다.
C #의 수석 설계자 인 Anders Hejlsberg는 여기 에서 해결책을 제안했습니다 . 또한 프레임 워크 디자인 팀이 람다가 필요한 Distinct 메서드의 오버로드를 추가하지 않기로 결정한 이유를 설명합니다.
위의 Daniel Hilgarth 의 답변은 Entity-Framework 의 System.NotSupported
예외로 이어집니다 . Entity-Framework를 사용하면 다음과 같아야 합니다.
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());
내가 찾은 것 중에서 귀하의 쿼리는 대부분 정확합니다. "select r"을 "select r.Text"로 변경하면 문제가 해결됩니다. 이것이 MSDN의 작동 방식을 문서화 한 방법입니다.
전의:
var query = (from r in table1 orderby r.Text select r.Text).distinct();
data.Select(x=>x.Name).Distinct().Select(x => new SelectListItem { Text = x });
이 코드를 사용해보십시오 :
table1.GroupBy(x => x.Text).Select(x => x.FirstOrDefault());
당신은 이것을 시도 할 수 있습니다 :table1.GroupBy(t => t.Text).Select(shape => shape.r)).Distinct();
참고 URL : https://stackoverflow.com/questions/14321013/distinct-in-linq-based-on-only-one-field-of-the-table
'program tip' 카테고리의 다른 글
자식에서 여러 원격 지점 삭제 (0) | 2020.08.03 |
---|---|
Android-애플리케이션 이름을 얻는 방법 (0) | 2020.08.03 |
Object.freeze () 대 const (0) | 2020.08.03 |
Vue 데이터에서 href로 값을 전달하는 방법은 무엇입니까? (0) | 2020.08.03 |
몽구스로 ObjectId를 생성하려면 어떻게해야합니까? (0) | 2020.08.03 |