2009-07-16 2 views
1
Dim entName = "Some Auto Dealer" 
    Dim whereEntity As Expression(Of Func(Of Entity, Boolean)) = Function(en) en.ENTY_Name = entName 
    Dim login = Repository(Of Entity).Create().FindSingle(whereEntity) 

    Dim whereDealer As Expression(Of Func(Of Dealer, Boolean)) = Function(dlr) dlr.Entity.Equals(login) 
    Dim dealer = Repository(Of Dealer).Create().FindSingle(whereDealer) 

    Dim whereContract As Expression(Of Func(Of MBI_Contract, Boolean)) = Function(c) c.Dealer.Equals(dealer) AndAlso c.Vehicle.Make.Equals(ford) 
    Dim fordContractsFromPSAuto = Repository(Of MBI_Contract).Create().FindAll(whereContract).ToList() 

어떻게하면 좋을까요? 그것은 작동하고 그것은 꽤 빠르지 만 그것은 나에게 잔인한 것 같습니다. FindSingle과 FindAll은 Where 절의 인수로 Expression(Of Func(Of T, Boolean))을 사용합니다. 이것은 람다 표현을 쓰는 데있어서 처음하는 일이기 때문에 나쁠 때는 용서해주세요.Linq Newbie. 이 Linq 쿼리를보다 간결하게 작성할 수 있습니까?

참고 리포지토리는 일반 클래스이며 Create는 DataContext 개체를 반환하는 팩터 리 메서드입니다. 이 응용 프로그램은 LinqToSql을 사용하고 있습니다.

어떤 조언을 주셔서 감사합니다. 건배, 샌디에고 ~ ck

+0

내가 표현에 익숙하지 않다, 또는 Func을 등, 당신은 C#을 사용하는 것이 좋습니다 아마도 lambda에 대한 표기법은 더 간단 할 것입니다. –

+0

예 100 % C#, c => c.Something = someValue는 사용하기가 매우 쉽지만이 특정 프로젝트는 VB.NET으로 작성되었으며 C#으로 변환하면 프로젝트 관리자의 공룡으로부터 총에 맞았습니다. – Hcabnettek

답변

1

저는 C# 프로그래머입니다. 따라서이 제안이 실제로 적용되지 않으면 유감입니다. C#에서는 일반적으로 람다와 메서드 호출을 포함하는 한 줄을 사용합니다. 예 :

대안으로

, 당신이를 다시 작성할 수 ...

Dim login = Repository(Of Entity).Create().FindSingle(_ 
    Function(en) en.ENTY_Name = entName) 

이 아마하지만 개인적인 취향에 온다 :

var login = Repository<Entity>.Create().Single(en => en.ENTY_Name == entName); 

난 당신 같은 VB에서 비슷한 일을 할 수 있다고 생각 쿼리와 유사한 문법을 ​​사용하는 모든 것; 나는 내가 매우 빠르게 변환 할 수 없습니다 매우 자주 사용하지 않는,하지만 더 같은 것 :

Dim contract = From c in Repository(Of MBI_Contract) _ 
    join d in Repository(Of Dealer) on c.Dealer equals d _ 
    where d.Entity.ENTY_Name = entName _ 
    select c 
+0

차가움. 조언 해주셔서 감사합니다. :) – Hcabnettek

관련 문제