"where"절을 사용할 때 문제가 발생하는 까다로운 linq 쿼리가 있습니다. 서브 쿼리. 다음 linq 쿼리에서 where 절은 "쿼리 본문은 select 절 또는 linq 그룹 절로 끝나야합니다."
이
내가 함께 일하고 있어요 스키마입니다 :자동차
이름 - (NVARCHAR)
Garage_Id - (고유 식별자) - FK
아이디 - (고유 식별자) - PK
차고
ID (고유 식별자) - PK
이름 (nvarchar)
CarTire 기록 - (날짜) - PK
CarId - (고유 식별자) - PK
TireId - (고유 식별자) - PK
타이어
의 serialNumber - (VARCHAR) 아이디 - (uniqueidentifier) - PK
사이드 웰 영향
기록한 - (날짜) - PK
TireId - (고유 식별자) - PK, FK
TreadImpact
기록 - (날짜) - PK
TireId - (고유 식별자) - PL, FK
CarBodyImpact
기록 - (날짜) - PK
CarId - (고유 식별자) - PK, FK
목
Name ----------- Id ---------- sidewallimpact -- treadimpact -----carbodyimpact
Red Car --------12334 ------1 ----------------------22--------------------34
가 나는 다음과 같은 SQL 쿼리와 함께 원하는 것을 얻을 수 있습니다 :는 내가 (허접스런 서식을 용서) 내 쿼리를 달성하기 위해 노력하고있어입니다
SELECT TOP(12) cr.NAME,
cr.id,
t.sidewallimpact,
p.treadimpact,
s.carbodyimpact,
(t.sidewallimpact
+ p.treadimpact
+ s.carbodyimpact) Totals
FROM car cr
JOIN (SELECT th.carId,
Count(*) sidewallimpact
FROM CarTire th
JOIN tires ti
ON th.tireid = ti.id
JOIN sidewallimpact tah
ON ti.id = tah.tireid
WHERE (tah.recorded >= '01/01/2014'
AND tah.recorded <= '09/25/2014')
GROUP BY th.carId) t
ON cr.id = t.carid
JOIN (SELECT th.carid,
Count(*) treadimpact
FROM CarTire th
JOIN tires ti
ON th.tireid = ti.id
JOIN treadimpact pah
ON ti.id = pah.tireid
WHERE (pah.recorded >= '01/01/2014'
AND pah.recorded <= '09/25/2014')
GROUP BY th.carid) p
ON cr.id = p.carid
JOIN (SELECT cr.id,
Count(*) carbodyimpact
FROM car cr
JOIN carbodyimpact sah
ON cr.id = sah.carid
WHERE (sah.recorded >= '01/01/2014'
AND sah.recorded <= '09/25/2014')
GROUP BY tr.id) s
ON cr.id = s.id
WHERE cr.garage_id = 'A6087B27-6E18-4B50-B8A6-7E1F746A312E'
ORDER BY totals DESC
하지만하려고 할 때 linqpad를 사용하여 linq로 변환합니다. 문제가 발생합니다. 내가 linqpad이 무엇인지 지금 여기입니다 :
Void Main()
{
var top12 = from tr in Cars
where tr.Garage_Id == new Guid("A6087B27-6E18-4B50-B8A6-7E1F746A312E")
join t in (
from th in CarTire
join ti in Tires
on th.TireId equals ti.Id
join tah in SideWallImpact
on ti.Id equals tah.TireId
where (th.Recorded >= new DateTime(2014, 01,01) && th.Recorded <= new DateTime(2014,9,25))
into j1
from j2 in j1
group j2 by th.CarId into grouped
select new { CarId = grouped.Key, Count = grouped.Count(t => t != null)}
) on tr.Id equals t.CarId
join p in
(
from th in CarTire
join ti in Tires
on th.TireId equals ti.Id
join pah in TreadImpact
on ti.Id equals pah.TireId
where (th.Recorded >= new DateTime(2014, 01,01) && th.Recorded <= new DateTime(2014,9,25))
into j1
from j2 in j1
group j2 by th.CarId into grouped
select new { CarId = grouped.Key, Count = grouped.Count(t => t != null)}
)
on tr.Id equals p.CarId
select new {Name = tr.Name, Id = tr.Id, SidWallCount = t.Count, TreadCount = p.Count };
top12.Dump();
}
의 LINQ 패드는 다음 줄에 질식 :
where (tah.Recorded >= new DateTime(2014, 01,01) && tah.Recorded <= new DateTime(2014,9,25))
이 오류 제공 : 곳으로 이동
"A query body must end with a select clause or a group clause linq"
내가 해봤를 모든 곳에서 동일한 오류가 발생합니다. 어떤 힌트도 크게 감사 할 것입니다. 상대적으로 짧은 것을 유지하기 위해 BodyImpact 테이블에 조인을 포함시키지 않았다는 점에 유의하십시오. 감사!
이것은 내가 필요한 것입니다. 대단히 감사합니다! – Bruno