Entity framework LINQ-在多属性问题上使用distinct/GroupBy进行查询

Entity framework LINQ-在多属性问题上使用distinct/GroupBy进行查询,entity-framework,linq-to-sql,linq-to-entities,distinct,distinct-values,Entity Framework,Linq To Sql,Linq To Entities,Distinct,Distinct Values,我在domainContext的EntitySet中存储了一些数据,我只想从中选择其中的一部分。问题是我得到了所有的名字,而不仅仅是日期最长的“新”名字 以下是数据: 站点ID CageId CageName日期 1,1,Lot1,'2011-05-05' 1,1,新的,'2011-05-06' 1、2、Lot1、'2011-05-05' 1,2,新的,'2011-05-06' 1、3、Lot1、'2011-05-05' 1,3,新的,'2011-05-06' 因此,对于列出的每个CageId,

我在domainContext的EntitySet中存储了一些数据,我只想从中选择其中的一部分。问题是我得到了所有的名字,而不仅仅是日期最长的“新”名字

以下是数据:

站点ID CageId CageName日期
1,1,Lot1,'2011-05-05'
1,1,新的,'2011-05-06'
1、2、Lot1、'2011-05-05'
1,2,新的,'2011-05-06'
1、3、Lot1、'2011-05-05'
1,3,新的,'2011-05-06'

因此,对于列出的每个CageId,我想返回记录中日期最高的CageName。 我尝试执行此操作的代码如下:

Dim CageName As Array

CageName = DomainContext.SiteCageDatas.Where(Function(h) h.SiteId = SiteId) _
      .Select(Function(x) x.CageName).Distinct.ToArray() 
但这只是给了我所有的名字。。你知道我该怎么解决这个问题吗,我想可能是用groupby或者别的什么? 介意我正在使用VB.NET

尝试以下操作:

DomainContext.SiteCageDatas.GroupBy(Function(x) x.CageId).Select(Function(x) x.OrderBy(Function(x) x.Date).LastOrDefault()).Where(Function(x) x IsNot Nothing).Select(Function(x) x.CageName).ToArray()

我现在正在这样做,但没有任何回报:(


有帮助,但不起作用。我忘了提到我可能还需要在siteid上分组-因为我可以有许多像上面那样列出的站点。我只想要每个siteid/cageid的最新CageName。还有其他提示吗?你能给我一个测试数据正确输出的例子吗?还有,我建议创建一个存储过程我们必须完成这样的任务
 CageName = DomainContext.SiteCageDatas.GroupBy(Function(a) New With {a.SiteId, a.CageId}).Select(Function(a) a.OrderBy(Function(b) b.Date).LastOrDefault()).Where(Function(x) x.SiteId = SiteId).Select(Function(x) x.CageName).ToArray()