【发布时间】:2020-02-09 10:14:33
【问题描述】:
我需要一些帮助(因为我在休息 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。
问题是如何从每个 NewsCategories 中获取最后的条目?
例如:健康类别有 10 个条目,运动类别有 20 个条目...我想取最后一个条目是今天写的。因此,由于我有 8 个类别的选择,那么我必须带回 8 个新闻。
我尝试了一些代码,但我无法达到任何时候。我最后的机会是在这里向你们寻求帮助。
我尝试了一些在互联网上共享的代码,但没有一个对我有用。
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 引起的?
【问题讨论】:
-
可以分两步查询。首先在内存中获取数据,然后应用
group by,以避免在数据库端映射group by。看看stackoverflow.com/questions/60141102/…
标签: linq entity-framework-core categories extension-methods