如何解决从每个类别中获取第一项
我有5个类别:
书籍,DVD,租金,购买,出售
我使用以下查询选择最新的商品计数。
public async Task<IList<Post>> GetRecentPostsAsync(int count)
{
return await _db.Posts
.Where(e => e.Published.HasValue && e.Published.Value <= DateTime.Today)
.OrderByDescending(e => e.Published)
.Take(count)
.ToListAsync();
}
我的Post类如下:
public class Post
{
#region Properties
[Key]
public int Id { get; set; }
[Required]
[StringLength(100)]
public string Title { get; set; }
[Required]
[StringLength(25)]
public string Category { get; set; }
public DateTime? Published { get; set; }
#endregion
}
这将返回我的物品计数。我想创建一个新功能,从前4个类别中获取最新发布的项目,因此不包括“销售”类别。它应该返回4项。
我该如何实现?
解决方法
没有立即理解这个问题。所以,尝试一下。
public async Task<IList<Post>> GetRecentPostsAsync()
{
List<string> categories = new List<string> { "Book","DVD","Rent","Buy" };
List<Post> result = new List<Post>();
foreach (string category in categories)
{
Post post = db.Posts.Where(e => e.Published.HasValue && e.Published.Value <= DateTime.Today && e.Category == category)
.OrderByDescending(e => e.Published)
.Take(1).First();
result.Add(post);
}
return result;
}
,
尝试一下。这将为您提供按类别(不包括卖出)的计数
REGEXP_LIKE
,
这应该给您返回List<Post>
,其中每个类别中除“出售”外最新发布的Post
:
return await _db.Posts
.Where(x => x.Category != "Sell" && x.Published.HasValue && x.Published.Value <= DateTime.Today)
.GroupBy(x => x.Category)
.Select(x => x.OrderByDescending(x => x.Published).Take(1))
.SelectMany(x => x)
.ToListAsync();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。