【发布时间】:2015-04-08 17:32:53
【问题描述】:
我正在尝试用产品列表填充 Typed GridView,它是最后一个状态。
由于Distinct() 子句,第一个查询工作正常并为每个产品返回一条记录。但是现在我需要显示 LAST 的情况并从其他表中获取一些数据以显示在 TYPED GridView。
(ProductSituationHistory基本上包含ProductId和SituationId,以跟踪产品获得的所有状态...
public IQueryable<Product> SelectProducts()
{
var query = (from ph in db.ProductSituationHistory
join p in db.Products on ph.ProductId equals p.Id
join s in db.Situation on ph.SituationId equals s.Id
select p).Distinct();
return query;
}
所以,我创建了另一个名为 ProductGridView 的类型类(我不喜欢使用匿名类型,如果是强类型,GridView 在这里会更好地工作)查询是这样的:
public IQueryable<ProductGridView> SelectProducts()
{
var query = (from ph in db.ProductSituationHistory
join p in db.Products on ph.ProductId equals p.Id
join s in db.Situation on ph.SituationId equals s.Id
select new ProductGridView
{
Id = p.Id,
Name = p.Name,
Situation = s.Description,
Manufacturer = p.Manufacturer.Name
}).Distinct();
return query;
}
现在的问题是 Distinct() 不起作用,因为很明显,没有一个 ProductGridView 项会相等(SituationId 发生变化)。如何获取所有产品的列表,同时仅从 ProductSituationHistory 中获取每个产品的最后一条记录?
【问题讨论】:
-
为什么不能按日期desc排序并取第一条记录?
标签: c# linq linq-to-entities