我需要为每个 ProductTypeName 获取前 2 个产品:
var productDetails = (from p in products
join po in productOrganisations
on p.Id equals po.ProductId
where po.OrganisationId == id
where p.ProductTypeId == (typeId > 0 ? typeId : p.ProductTypeId) //filter by type if specified
where p.IsLive
select new
{
Id = p.Id,
Name = p.Name,
SupplierName = p.Supplier.Name,
ProductTypeName = p.ProductType.Name,
ShortDescription = p.ShortDescription,
ProductTypeId = p.ProductTypeId,
DatePublished = p.DatePublished,
CurrencyId = p.CurrencyId,
})
.AsNoTracking()
.ToArray();
Run Code Online (Sandbox Code Playgroud)
目前上述声明退回我所有的产品,数百。每个产品都有一个属性 ProductTypeName 。
我需要按此 ProductTypeName 分组,然后按发布日期降序获取每个组中的前两个。
有任何想法吗?
小智 5
ChrisWue 在这里提供了一个很好的答案。如果这解决了你的问题,请给他投上一票
强烈键入您的列表,然后使用GroupBy,OrderBy并Take获得您的结果。
像这样强烈地输入你的结果集:
List<ProductDetails> myProductList = (from p in products
join po in productOrganisations
on p.Id equals po.ProductId
where po.OrganisationId == id
where p.ProductTypeId == (typeId > 0 ? typeId : p.ProductTypeId) //filter by type if specified
where p.IsLive
select new
{
Id = p.Id,
Name = p.Name,
SupplierName = p.Supplier.Name,
ProductTypeName = p.ProductType.Name,
ShortDescription = p.ShortDescription,
ProductTypeId = p.ProductTypeId,
DatePublished = p.DatePublished,
CurrencyId = p.CurrencyId,
})
.AsNoTracking()
.ToList();
Run Code Online (Sandbox Code Playgroud)
然后像这样查询列表:
List<ProductDetail> finalResult =
myProductList.GroupBy(p => p.ProductTypeName)
.SelectMany(d => d.OrderBy(r => r.DatePublished.Take(2))
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |