2013-02-02 3 views
1

아침에 여기를 검색하는 데 사용하지 않고도 해결하고있는이 태스크 문제에 대한 답을 찾기 위해 고심하고 있습니다. MIN/MAX 절을 살펴 보았지만 내 시나리오에서 적절하게 맞지 않는 것처럼 보입니다.SQL에서 Linq로 - 첫 번째로 일치하는 행 선택

내가 열이

using (DataClasses2DataContext db = new DataClasses2DataContext()) 
     { 
      var routes = (

          from txcalllines in db.TxcAllLines 
          where 
           txcalllines.LineName == searchString 
          select txcalllines); 

      return routes.ToList(); 
     } 

일치 어디에서 모든 행을 검색이 간단한 LINQ 쿼리를 수행하고 그리고이 결과를 반환

FILE       LINE START    FINISH 
output_txc_45486m.xml   486 North Station  Friswell Place 
SVRAYAO486-20121008-22264.xml 486 Dunoon    Inveraray 
SVRAYAO486-20121008-22265.xml 486 Dunoon    Inveraray 
SVRAYAO486-20121008-22266.xml 486 Dunoon    Inveraray 
SVRGMB04860-20120103-5774.xml 486 BURY    RADCLIFFE 
SVRGMB04860-20120103-5775.xml 486 BURY    RADCLIFFE 
SVRYNAO486-20120217-44588.xml 486 Selby Bus Stn  Pollington Circular 

문제는이 쿼리를 실행하는 여러 행을 반환 동일한 경로 (LINE, START 및 FINISH가 동일한 것을 볼 수 있음)에서 각 경로의 첫 번째로 일치하는 행만 반환하려는 경우

그래서 원하는 결과는 다음과 같습니다

FILE       LINE START    FINISH 
output_txc_45486m.xml   486 North Station  Friswell Place 
SVRAYAO486-20121008-22264.xml 486 Dunoon    Inveraray 
SVRGMB04860-20120103-5774.xml 486 BURY    RADCLIFFE 
SVRYNAO486-20120217-44588.xml 486 Selby Bus Stn  Pollington Circular 
+0

좋은 점은 .ToList()를 두 번 호출하지 않았기 때문입니다. –

+0

그냥 클라이언트 응용 프로그램에서 제대로 읽을 수있는 목록에 넣습니다. 위의 코드는 WCF 서비스에서 제공 한 것입니다. –

답변

1

그런 다음 각 그룹의 첫 번째 요소를 얻을 GroupBy를 사용할 수 있습니다.

var routes = (from txcalllines in db.TxcAllLines 
       where txcalllines.LineName == searchString 
       group txcalllines by new { txcalllines.Start, txcalllines.Finish } into g // Groups the txcalllines by the pair (Start, Finish) 
       select g.First()); // Gets the first intem of the group 
+0

안녕 세드릭, 답변 해 주셔서 감사합니다. 그러나 컴파일되지 않습니다. '몇 가지 예상'과 '잘못된 표현 용어' '등 몇 가지 문제가 제기됩니다. –

+1

@ DanSewell 내 게시물을 업데이트했습니다. (_in_가 _into로 변경되었습니다.) –