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已经生锈了,如果我犯了错误,请纠正我。

我正在努力了解这一点如何适用于我的情况。也许这是一个周五的时刻,但你介意把你的解决方案应用到我的问题上吗?干杯。干得好——那是一个星期五的时刻。