2013-11-26 3 views
1

저는 LINQ를 처음 접했기 때문에 구문을 이해하기 시작했지만 Linqer 응용 프로그램을 사용하여 SQL 문을 LINQ 문으로 변환하기로 결정했습니다. 그러나 LINQ 쿼리는 동일한 결과를 생성하지 않습니다. 난 정말 내가이 변환 100 %를 이해하고 말할 수 있지만이 시점이 아니다Linqer SQL을 LINQ로 변환 - 다른 결과

From Costs In 
(From Costs In db.Costs 
Where 
    CLng(Costs.ordnumber) = 19374911 
Select 
    Column1 = CType((Costs.linehaul + Costs.accessorial),Decimal?), 
    ordnumber = Costs.ordnumber, 
    linehaul = Costs.linehaul, 
    accessorial = Costs.accessorial, 
    Dummy = "x" 
) 
Group Costs By Costs.Dummy Into g = Group 
Select New With { 
    .Column1 = If(CType(g.Sum(Function(p) p.linehaul + p.accessorial),Decimal?) Is Nothing,0,g.Sum(Function(p) p.linehaul + p.accessorial)) 
} 

:

SELECT ISNULL(SUM(linehaul + accessorial), 0) FROM costs 
WHERE 
ordnumber = 19374911 

그것은이 LINQ로 변환 :

은 여기 내 SQL 쿼리입니다. 주어진 ordnumber에 대해 비용이있는 경우 결과는 일관되지만 비용이 주어진 ordnumber에 대해 발견되지 않으면 LINQ는 SQL과 달리 기본값 "0"을 반환하는 대신 빈 결과 집합을 반환합니다.

빈 결과 대신 0을 반환하려면 LINQ에 무엇을 추가해야합니까?

+2

그 쿼리는 필요 이상으로 복잡해 보입니다. – Mansfield

+0

@Mansfield - 전적으로 동의합니다. 실제로 테이블에서 다른 필드를 수동으로 제거했습니다. 확실하지 왜 나는 우리가 더미 필드가 필요하고 그것에 의해 그룹화 이해합니다. LINQ를 손으로 작성하는 방법을 배우면보다 간단한 쿼리에서이를 수행 할 수있을 것이라고 확신합니다. 주어진 시점에 비용 기록이 발견되지 않으면이 시점에서 0을 얻고 싶습니다. –

+0

linq을 SQL에 사용하고 있습니까? 또는 엔티티 프레임 워크? – Mansfield

답변

1

당신은 (모두 EF와 L2SQL을 위해 일한다) 같은 것을 할 수 있어야한다 :

int cost = Context.Costs.Where(x => x.ordnumber == 19374911) 
    .Sum(y => y.linehaul + y.accessorial)) ?? 0; 

VB.net은 다음과 같이해야한다 : (테스트하지)

Dim cost As Integer = If(Context.Costs.Where(Function(cost) cost.ordnumber = 19374911).Sum(Function(x) x.linehaul + y.accessorial)), 0) 
+1

그의 질문은 VB.NET을 사용합니다. 어쩌면 당신도 똑같이해야할까요? – MarcinJuraszek

+1

@MarcinJuraszek 태그가 보이지 않았습니다 ... 변환하겠습니다. – Mansfield

+0

내가 예상 한 것보다 쉽습니다. –