2010-11-30 7 views
0

저는 Linq의 초보자입니다. 나는 일련의 레코드에서 최소값을 얻으려면 linq 쿼리를 작성하려고합니다. 나는 groupby를 사용할 필요가있다. select와 min은 같은 쿼리에서 사용되지만 group by 절을 사용할 때 문제가있다. 여기에 내가 작성한 질의가 있습니다.Linq의 Groupby 및 where 절

var data =newTrips.groupby (x => x.TripPath.TripPathLink.Link.Road.Name) 
        .Where(x => x.TripPath.PathNumber == pathnum) 
        .Select(x => x.TripPath.TripPathLink.Link.Speed).Min(); 

함께 사용하면 오류가 계속 발생합니다.

내 쿼리는

  1. 는 모든 값을 선택해야합니다.
  2. where 절 (pathnum)을 통해 필터링하십시오.
  3. 도로로 그룹 이름
  4. 마지막으로 최소값을 가져옵니다.

어떤 사람은 내가 잘못하고있는 일과 원하는 결과를 얻는 방법을 알려줄 수 있습니다. 도로 당 최소 속도를 이름 - 이것은 당신이 당신이 원하는 원하는 줄 것을

감사합니다, Pawan

+1

무엇 오류, 그리고이 LINQ SQL 또는 무엇입니까? –

답변

4

그것은 데이터 간의 관계를 모르고 조금 까다로운하지만 나는 (그것을 시도하지 않고) 생각합니다. 이름 및 속도 속성을 가진 익명 개체의 컬렉션이 생성됩니다.

var data = newTrips.Where(x => x.TripPath.PathNumber == pathnum) 
        .Select(x => x.TripPath.TripPathLink.Link) 
        .GroupBy(x => x.Road.Name) 
        .Select(g => new { Name = g.Key, Speed = g.Min(l => l.Speed) }); 
+0

결과를 얻기 위해 foreach 루프를 수행 할 때 객체 참조가 객체 참조의 인스턴스로 설정되지 않습니다. – Pawan

+0

제대로 작동합니다. 고마워 얘들 아 – Pawan

0

난 당신이 오히려 속도보다 최소 속도가 여행을하고자 생각하고, 내가 다른 데이터 구조를 있으리라 믿고있어 이후로, 내가 tvanfosson의 대답에 추가 할 것입니다 :

var pathnum = 1; 
var trips = from trip in newTrips 
      where trip.TripPath.PathNumber == pathnum 
      group trip by trip.TripPath.TripPathLink.Link.Road.Name into g 
      let minSpeed = g.Min(t => t.TripPath.TripPathLink.Link.Speed) 
      select new { 
       Name = g.Key, 
       Trip = g.Single(t => t.TripPath.TripPathLink.Link.Speed == minSpeed) }; 

foreach (var t in trips) 
{ 
    Console.WriteLine("Name = {0}, TripId = {1}", t.Name, t.Trip.TripId); 
} 
+0

나는 둘 다 리처드 tvanfosson 방법을 시도하고 나에게 개체의 인스턴스로 설정되지 않은 개체 참조를 제공합니다. 이것은 각 반복마다 일어난 일입니다. – Pawan