【发布时间】:2009-07-16 16:56:43
【问题描述】:
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 将 Expression(Of Func(Of T, Boolean)) 作为 Where 子句的 arg。这是我第一次尝试编写 Lambda 表达式,如果看起来不好请见谅。
注意Repository 是一个泛型类,Create 是一个返回DataContext 对象的工厂方法。此应用程序正在使用 LinqToSql。
感谢您的任何建议。 干杯, ~ck 在圣地亚哥
【问题讨论】:
-
我不熟悉Expression,或者OF Func等,你可以考虑使用C#,也许它的lambdas表示法更简单。
-
是的,我 100% 同意 c#,c=>c.Something = someValue 非常易于使用,但是这个特殊的项目是用 VB.NET 编写的,并将其转换为 C# 是从项目经理的恐龙。
标签: linq linq-to-sql generics