LINQ에서 SELECT UNIQUE를 수행하려면 어떻게해야합니까?


96

다음과 같은 목록이 있습니다.

Red
Red
Brown
Yellow
Green
Green
Brown
Red
Orange

LINQ로 SELECT UNIQUE를 수행하려고합니다. 즉,

Red
Brown
Yellow
Green
Orange

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name;

그런 다음 이것을 다음으로 변경했습니다.

var uniqueColors = from dbo in database.MainTable
                   where dbo.Property == true
                   select dbo.Color.Name.Distinct();

성공하지 못했습니다. 첫 번째 select는 모든 색상을 가져 오므로 고유 한 값만 가져 오도록 어떻게 수정합니까?

이 쿼리를 구조화하는 더 좋은 방법이 있다면 해당 경로로 이동하는 것이 좋습니다.

.OrderBy( "column name" )예를 들어 색상 이름, 이름 속성별로 알파벳순으로 편집 할 수 있도록 어떻게해야 합니까?

계속 메시지를받습니다.

형식 인수는 사용법에서 유추 할 수 없습니다. 형식 인수를 명시 적으로 지정해보십시오.

답변:


159

Distinct()당신이 그 후 정렬해야하므로, 주문까지 엉망 것입니다.

var uniqueColors = 
               (from dbo in database.MainTable 
                 where dbo.Property == true 
                 select dbo.Color.Name).Distinct().OrderBy(name=>name);

3
감사합니다. 정답입니다. 누군가 .OrderBy () 매개 변수에 무엇이 있는지 설명해 주시겠습니까? 이름 => 이름이 있습니다. 그 이름이 DB의 열 이름에서 유래 되었습니까? 우리가 가지고 있기 때문에 dbo.Color.Name다음 단지 name=>name는 열 이름이 아닌 나에게 어떤 힌트? 내가 그냥 변경하면 기괴하게도 제대로 정렬됩니다.OrderBy(a=>a)
baron

3
변수 이름은 관련이 없습니다. 그것은 단지 {함수에 전달 된 객체} => {정렬에 사용되는 객체}입니다. 이미 Select를 수행 했으므로 정렬되는 컬렉션의 유일한 것은 이름입니다.
James Curran

@JamesCurran에게 감사드립니다. 귀하의 솔루션이 저를 많이 도왔습니다.
Ron

전체 객체 / 레코드로 정렬하는 OrderedBy ()가 있으면 좋을 것 같습니다. 확장 메서드는 이유없이 여전히 대리자를 호출합니다.
NetMage

@NetMage- "전체 개체 / 레코드"라는 의미를 명확히합니다. 모든 분야? 어떤 순서로? 기본 키 포함?
James Curran

20
var uniqueColors = (from dbo in database.MainTable 
                    where dbo.Property == true
                    select dbo.Color.Name).Distinct();

10

쿼리 이해 구문을 사용하면 다음과 같이 orderby를 얻을 수 있습니다.

var uniqueColors = (from dbo in database.MainTable
                    where dbo.Property
                    orderby dbo.Color.Name ascending
                    select dbo.Color.Name).Distinct();

흠 ... 알파벳 정렬을 얻지 못했습니다. 어떤 이유에서인지 ... 오름차순과 내림차순을 전환하여 동일한 결과를 얻었습니다. 뚜렷한 진술이 그것에 영향을 줍니까? 아마도 그 후에 주문해야할까요?
남작

var uniqueColors = from result in (from dbo in database.MainTable where dbo.Property select dbo.Color.Name) .Distinct () orderby result ascending;
cordialgerm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.