2012-09-14 61 views
0

我想用VB做一个连接查询Linq。我想回到最大EnterTime,但我得到一个错误,说“在Linq加入查询中选择最大日期

不能转换System.Linq.Iqueryable(日期),以System.Nullable(中 日期)

我怎样才能解决这个问题?

 Dim results = 
      From b In context.H_Beneficiary 
      Join e In context.Employees On b.EmployeeId Equals (e.EmployeeId) 
      Join c In context.Companies On e.CompanyId Equals (c.CompanyId) _ 
      Where e.IntegrationId.Equals(c.CompanyId) _ 
      And (b.EndDate Is Nothing Or b.EndDate >= DateTime.Today) 
      Select b.EnterTime 

回答

1

您的LINQ查询返回的日期序列,没有一个日期。这就是为什么分配将无法正常工作。

要从查询分配最大日期,你可以按日期查询,比挑的第一个结果,如果有的话:

Dim results = 
     From b In context.H_Beneficiary 
     Join e In context.Employees On b.EmployeeId Equals (e.EmployeeId) 
     Join c In context.Companies On e.CompanyId Equals (c.CompanyId) _ 
     Where e.CompanyIntegrationId.Equals(c.CompanyId) _ 
     And (b.EndDate Is Nothing Or b.EndDate >= DateTime.Today) 
     Order By b.EnterTime Descending 
     Select b.EnterTime 

Dim latestDate As Nullable(Of DateTime) = results.FirstOrDefault() 
+0

当我做dates.Max()我得到这个错误:无法创建类型'System.Object'的常量值。只有原始类型或枚举类型在此上下文中受支持。 –

+0

“只支持原始类型”:我想问题可能是分配给可空类型。我将用另一种策略编辑我的代码。 –

+0

我修改了我的查询,并将发布在 –