从具有Linq扩展名的每个类别中获取最后一个项目

问题描述 投票:0回答:1

我需要一些帮助(因为我尝试在8岁休息后尝试学习C#)

我有两个表具有一对多的关系。

    public class NewsCategory: IEntity
{
    public int NewsCategoryId { get; set; }
    public string NewsCategoryName { get; set; }
    public News News { get; set; }
}

和新闻表

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必须在Category表中仅具有1 categoryid。

问题是如何从每个新闻类别中获取最后的条目?

例如:“健康”类别有10个条目,“运动”类别有20个条目...我想最后写的是今天。因此,我有8个类别的选择,那么我必须带回8个新闻。

我尝试了一些代码,但我始终无法到达。我最后的机会是向你们寻求帮助。

我尝试了一些在Internet上共享的代码,但是没有一个对我有用。

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

        }
    }
linq entity-framework-core categories extension-methods
1个回答
0
投票

您可能需要按NewsCategoryId分组,然后在每个分组中选择最新的分组。例如,

con.News.Include(x => x.NewsCategory)
        .GroupBy(x=>x.NewsCategoryId)
        .Select(x=>x.ToList().OrderByDescending(c=>c.NewsReleaseDate).First());

样本输入

enter image description here

样本输出

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.