2013-02-07 3 views
5

LINQ를 사용하여 쿼리 할 SQL Server에 저장된 테이블이 있습니다. 테이블의 막연한 설명 :각 키의 최대 값을 가진 행 찾기

ID1 | ID2 | SomeData 
----------------------------- 
    1 | 1 | 'Moo' 
    1 | 2 | 'Meow' 
    1 | 3 | 'Woof' 
    1 | 4 | 'Cheap' 
    2 | 1 | 'Quack' 
    2 | 2 | 'Grrrrr' 
    2 | 3 | 'Wan wan' 

I 행에만 관심 ID2ID1 예는 결과를 원하는 당 최대 값입니다

1 | 4 | 'Cheap' 
    2 | 3 | 'Wan wan' 

나는이 SQL 코드와 함께 올라와있다 :

SELECT * 
FROM SomeTable a 
INNER JOIN 
(
    SELECT ID1, MAX(ID2) as SomeName 
    FROM SomeTable 
    GROUP BY ID1 
) as b 
ON a.ID1 = b.ID1 and a.ID2 = b.SomeName 

LINQ에서 구현할 때 하위 쿼리가 필요합니까? 즉, 데이터베이스를 쿼리하고 변수를 '내부 쿼리'결과와 함께로드 한 다음 동일한 테이블을 쿼리하지만 '내부 쿼리'의 값과 비교합니다. 나는 잠시 동안이 문제를 해결한다면, 결국은 얻을 것이지만, LINQ에서 이것을 매우 쉽게 할 수있는 멋진 방법이있는 것처럼 느껴집니다.

원하는 답변은 확장 메소드 구문을 사용합니다.

보너스 : 확장 메서드 구문 변환기에 대한 표준 LINQ 구문 형식이 있습니까? LINQ 문을 사용하기 위해 어떤 도구를 사용합니까? LINQ 쿼리를 사용하여 전체 C# (ASP.NET MVC)을 실행해야하는 것은 다소 부담 스럽습니다.

+4

LinqPad는 LINQ 문을 사용하여 놀아보세요! http://www.linqpad.net/ (일반 C# 코드도 사용) – driis

+2

[** LINQPad **] (http://www.linqpad.net/)의 사본을 얻으십시오. – mellamokb

답변

11

직진 방법 :

var result = db.SomeTable.GroupBy(x => x.ID).Select(g => g.OrderByDescending(x => x.ID2).First()); 

하지 않는 것이 중요 경우, 당신의 마음에 드는 프로파일 러를 확인할 수 있도록이가로 변환하는 방법 효율적인 SQL 완전히하십시오!

+0

그것은 훌륭합니다! 내림차순으로 주문하고 최고의 결과를 얻으십시오. 그래도 나는 여전히 다른 대답을보고 싶다. – Jeff

관련 문제