LINQ通用SUM-VB.NET
我有两种方法:LINQ通用SUM-VB.NET,vb.net,linq-to-objects,Vb.net,Linq To Objects,我有两种方法: Public Function GetTotalLimit(ByVal entity As Entity) As Int64 Return (From c In entity.Collection Select c.Limit).Sum() End Function Public Function GetTotalUsed(ByVal entity As Entity) As Int64
Public Function GetTotalLimit(ByVal entity As Entity) As Int64
Return (From c In entity.Collection
Select c.Limit).Sum()
End Function
Public Function GetTotalUsed(ByVal entity As Entity) As Int64
Return (From c In entity.Collection
Select c.Used).Sum()
End Function
我觉得这些可以重构为一个带有签名的方法:
Public Function GetTotal(Of TKey)(ByVal entity As Entity, ByVal field As Func(Of CollectionType, TKey)) As Int64
End Function
我来自一个C#背景,这阻碍了我理解这种方法的实质。有人可以帮忙吗?为什么不在“获取”语句中使用IQueryable
Public Function GetUsers() As IQueryable(Of User) Implements IUserRepository.GetUsers
Dim users = (From u In dc.Users
Select u)
Return users.
End Function
并对这些函数进行查询
Dim GetUser As User = UserRepository.GetUsers().Where(Function(u) (u.ID = id)).SingleOrDefault
Return GetUser
请看一下我在您的数据访问中谈论的内容
编辑:
由于您的方法是GetTotalLimit
和gettotalised
,所以我不确定您得到的是什么“对象”。我将尝试使用我的用户类来实现它
保持IQueryable不变,在调用该方法时,可以执行以下操作
Dim TotalLimitUsers = UserRepository.GetUsers().Sum(Function(u) u.Limit)
Dim TotalUsedUsers = UserRepository.GetUsers().Sum(Function(u) u.Used)
您建议的
GetTotal
函数已经存在于.Net中,只是Sum
的一个重载。您可以像entity.Collection.Sum(Function(c)c.Limit)
那样调用它,或者使用您的示例:
Public Function GetTotalLimit(ByVal entity As Entity) As Int64
Return entity.Collection.Sum(Function(c) c.Limit)
End Function
Public Function GetTotalUsed(ByVal entity As Entity) As Int64
Return entity.Collection.Sum(Function(c) c.Used)
End Function
我的VB已经生锈了,如果我犯了错误,请纠正我。我正在努力了解这一点如何适用于我的情况。也许这是一个周五的时刻,但你介意把你的解决方案应用到我的问题上吗?干杯。干得好——那是一个星期五的时刻。