LINQ - 在多个属性问题上使用distinct / Group By进行查询

时间:2011-05-05 14:03:19

标签: entity-framework linq-to-sql linq-to-entities distinct distinct-values

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

这是数据:

SiteId CageId CageName日期
1,1,Lot1,'2011-05-05'
1,1,LotNew,'2011-05-06'
1,2,Lot1,'2011-05-05'
1,2,LotNew,'2011-05-06'
1,3,Lot1,'2011-05-05'
1,3,LotNew,'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() 

但这只是给了我所有的CageNames ..任何想法我应该如何解决这个问题,我想也许可以使用groupby或者什么? 心神;我正在使用VB.NET

2 个答案:

答案 0 :(得分:1)

试试这个:

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()

答案 1 :(得分:1)

我现在正在这样做,但什么也没有回复:(

 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()