使用 Linq 扩展从每个类别中获取最后一项
Taking last items from each category with Linq extension
我需要一些帮助(因为我在 8 岁休息后尝试学习 C#)
我有两个 table 具有一对多关系。
public class NewsCategory: IEntity
{
public int NewsCategoryId { get; set; }
public string NewsCategoryName { get; set; }
public News News { get; set; }
}
和新闻 table
public class News: IEntity
{
public int NewsId { get; set; }
public string NewsHeader { get; set; }
public string NewsContent { get; set; }
public DateTime NewsReleaseDate => DateTime.Now;
public string NewsImgUrl { get; set; }
public int NewsCategoryId { get; set; }
public NewsCategory NewsCategory { get; set; }
}
NewsCategory.CategoryId分成8个选择。例如:健康、运动、旅游、时尚……
Table.News 必须只有类别 table 中的 1 个类别 ID。
问题是如何从每个 NewsCategories 中获取最后的条目?
例如:健康类别有 10 个条目,运动类别有 20 个条目...我想把最后一个条目写在今天。因此,由于我有 8 个类别选择,因此我必须带回 8 个新闻。
我尝试了一些代码,但始终无法访问。我最后的机会是在这里向你们寻求帮助。
我尝试了一些在互联网上共享的代码,但 none 对我有用。
public class EFNewsDal : EFGenericRepository<News, AdvertContext>, INewsDal
{
public List<News> GetLastEachNewsWithCategories()
{
using (AdvertContext con = new AdvertContext())
{
// con.News.Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).Reverse().Select(x => x.NewsCategoryId).Distinct().ToList();
//con.News.Include(x => x.NewsCategory).GroupBy(x => x.NewsCategoryId).Select(g => g.Last()).ToList();
//var query1= con.Set<News>().Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).GroupBy(x=>x.NewsCategoryId);
//var query2 = query1.Select(g => g.Last());
// var query = from g in con.News
// where g.NewsCategoryId != 0
// group g by g.NewsCategoryId into grp
// select grp.OrderByDescending(g => g.NewsId).First();
// return query.ToList();
//} // con.News.Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).GroupBy(x => x.NewsId).Select(grp => grp.LastOrDefault()).ToList();
}
}
更新:
我尝试了写下的代码。
return con.News.Include(x => x.NewsCategory)
.GroupBy(x => x.NewsCategoryId)
.Select(x => x.ToList().OrderByDescending(c => c.NewsReleaseDate).First()).ToList();
但是我现在收到这个错误。
这可能是由 Core 3.0 引起的?
您可能需要按 NewsCategoryId 分组,select 每组中的最新内容。例如,
con.News.Include(x => x.NewsCategory)
.GroupBy(x=>x.NewsCategoryId)
.Select(x=>x.ToList().OrderByDescending(c=>c.NewsReleaseDate).First());
示例输入
示例输出
我需要一些帮助(因为我在 8 岁休息后尝试学习 C#)
我有两个 table 具有一对多关系。
public class NewsCategory: IEntity
{
public int NewsCategoryId { get; set; }
public string NewsCategoryName { get; set; }
public News News { get; set; }
}
和新闻 table
public class News: IEntity
{
public int NewsId { get; set; }
public string NewsHeader { get; set; }
public string NewsContent { get; set; }
public DateTime NewsReleaseDate => DateTime.Now;
public string NewsImgUrl { get; set; }
public int NewsCategoryId { get; set; }
public NewsCategory NewsCategory { get; set; }
}
NewsCategory.CategoryId分成8个选择。例如:健康、运动、旅游、时尚…… Table.News 必须只有类别 table 中的 1 个类别 ID。
问题是如何从每个 NewsCategories 中获取最后的条目?
例如:健康类别有 10 个条目,运动类别有 20 个条目...我想把最后一个条目写在今天。因此,由于我有 8 个类别选择,因此我必须带回 8 个新闻。
我尝试了一些代码,但始终无法访问。我最后的机会是在这里向你们寻求帮助。
我尝试了一些在互联网上共享的代码,但 none 对我有用。
public class EFNewsDal : EFGenericRepository<News, AdvertContext>, INewsDal
{
public List<News> GetLastEachNewsWithCategories()
{
using (AdvertContext con = new AdvertContext())
{
// con.News.Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).Reverse().Select(x => x.NewsCategoryId).Distinct().ToList();
//con.News.Include(x => x.NewsCategory).GroupBy(x => x.NewsCategoryId).Select(g => g.Last()).ToList();
//var query1= con.Set<News>().Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).GroupBy(x=>x.NewsCategoryId);
//var query2 = query1.Select(g => g.Last());
// var query = from g in con.News
// where g.NewsCategoryId != 0
// group g by g.NewsCategoryId into grp
// select grp.OrderByDescending(g => g.NewsId).First();
// return query.ToList();
//} // con.News.Include(x => x.NewsCategory).Where(x => x.NewsCategoryId == x.NewsCategory.NewsCategoryId).GroupBy(x => x.NewsId).Select(grp => grp.LastOrDefault()).ToList();
}
}
更新:
我尝试了写下的代码。
return con.News.Include(x => x.NewsCategory)
.GroupBy(x => x.NewsCategoryId)
.Select(x => x.ToList().OrderByDescending(c => c.NewsReleaseDate).First()).ToList();
但是我现在收到这个错误。
这可能是由 Core 3.0 引起的?
您可能需要按 NewsCategoryId 分组,select 每组中的最新内容。例如,
con.News.Include(x => x.NewsCategory)
.GroupBy(x=>x.NewsCategoryId)
.Select(x=>x.ToList().OrderByDescending(c=>c.NewsReleaseDate).First());
示例输入
示例输出