我对LINQ相对较新,可以使用一些帮助。鉴于以下结构:
Public Class BaseRate
Public Property EffectiveDate As DateTime
Public Property PayRate As Decimal
End Class
我有一个IEnumerable(Of BaseRate)
来容纳几个对象。集合中可能有重复日期的数据,有些可能没有。我的业务要求如下:
BaseRate
过滤掉所有EffectiveDate.Date > objDate.Date
个对象(函数中提供objDate
)EffectiveDate.Date
。BaseRate
个对象EffectiveDate.Date
我以为我正在接近以下内容:
Dim distinct_dates As IEnumerable(Of IGrouping(Of DateTime, BaseRate)) _
= Me.GroupBy(Function(o) o.EffectiveDate.Date)
Dim active_at_date As IEnumerable(Of BaseRate) = distinct_dates.Select( _
Function(grp) grp.OrderByDescending( _
Function(o) o.EffectiveDate.Date).Where( _
Function(o) o.EffectiveDate.Date <= objDate.Date))
然而,我收到此错误:
无法转换类型&#39; WhereSelectEnumerableIterator`2 [System.Linq.IGrouping`2 [System.DateTime,BaseRate],System.Collections.Generic.IEnumerable`1 [BaseRate]]&#39;输入&#39; System.Collections.Generic.IEnumerable`1 [BaseRate]&#39;。
我确定我的订单错误,但不确定是什么。
我是用VB.NET和方法语法完成的,但可以随意回复。我可以根据需要翻译。
答案 0 :(得分:0)
我认为你只是缺少FirstOrDefault
电话。
LINQ在C#中看起来更清晰,所以我的答案将在C#中,正如你所说,你可以把它翻译成VB。
var results = source.Where(x => x.EffectiveDate.Date > objDate.Date)
.GroupBy(x => x.EffectiveDate)
.OrderByDescending(g => g.Key)
.FirstOrDefault()