2009-10-20 4 views
0

VB.NET으로 C# Linq 문을 변환하는 데 문제가 있습니다. 다음 진술을 변환해야합니다. 나는 i.Sum (v => v) 부분에 매달려있다. 여기 Linq to SQL - VB.NET 도움말로 C# 변환

from p in Products 
from u in Users 
let i = (from op in OrderProducts 
     where op.Order.User == u && op.Product == p 
     select op.ProductQty) 
let quant = i.Count() == 0 ? 0 : i.Sum(v=>v) 
select new {p.ProductName, u.UserName, Quantity = quant} 

내가 VB를 위해 가지고있는,하지만 만약 (i.Count() = 0, 0, i.Sum는()) _ 문은 매개 변수가 집계 연산자 '합'런타임 동안 예상 이상 지원되지 않습니다 말한다 (컴파일 타임 오류 없음). 또한 i.Sum (Function (q) i.ProductQty)도 작동하지 않습니다 (sum은이 인수로 호출 할 수 없음).

From p In Products _ 
From u In Users _ 
Let i = (From op In OrderProducts _ 
     Where op.Order.User.UserID = u.UserID And op.Product.ProductID = p.ProductID _ 
     Select op.ProductQty) _ 
Let Qty = _ 
     If(i.Count() = 0, 0, i.Sum()) _ 
Select New With {p.ProductName, u.Username, Qty} 

VB.NET으로 변환하여 작동하는 방법에 대한 아이디어가 있으십니까? 감사! C#에서

+3

정확한 번역을 원할 경우 C#의 '&&'는'And'가 아닌'AndAlso'와 동일합니다. 비슷하게'||'는'OrElse'가 아니라'OrElse'와 같습니다. –

답변

6

귀하의 "화살표"구문 :

.Sum(v => v) 

는 VB.NET에서 다음으로 변환 할 수 있습니다 :

.Sum(Function(v) v) 

는 "화살표는"구문은 람다 식이다. VB.NET의 람다 식에 대한 자세한 내용은 this MSDN entry을 확인하십시오.

+0

참고로 람다 식이라고합니다. –

+0

예. OP가 람다를 알지 못한다고 가정하지만 거기에 정확한 이름을 적어 두는 것이 좋습니다. – Larsenal