c# - 使用 Linq C# 从每个状态中获取 TOP5 记录
问题描述
我有一个VacancyApply
表,该表由状态 ID 组成,所以我需要来自每个状态的 Top5 数据。我想获取每个状态的前 5 条记录。状态就像 1,2,3
我的查询
var result = (from ui in _context.VacancyApply
join s in _context.UserProfile on ui.UserId equals s.UserId
join x in _context.Vacancy on ui.VacancyId equals x.VacancyId
join st in _context.Status on ui.StatusId equals st.StatusId
where ui.UserId == userId && ui.IsActive == true
orderby ui.StatusId
select new VacancyApply
{
VacancyApplyId = ui.VacancyApplyId,
VacancyId = ui.VacancyId,
UserId = ui.UserId,
StatusId = ui.StatusId,
VacancyName = x.VacancyName,
VacancyStack = x.VacancyStack,
VacancyEndDate = x.VacancyEndDate,
StatusName = st.StatusName,
UserName = s.FirstName
}).ToList();
解决方案
现在我可以从输出中看到它包含 OneVacancyId
和 One VendorId
。Vacancy
我有一种感觉,Status
表之间存在多对多关系。
但是,答案非常简单:您需要使用 LINQTake
扩展方法(也许在之后跟随它会很好,OrderBy
因为如果没有一些逻辑,只取最后一项是没有意义的):
var output = (logic to join, filter, etc.).OrderBy(lambda).Take(N); // N is the number of
// items you want to select
现在,如果您希望通常从Vacancy
并且仅在加入它之后获取最后一个项目,Status
请执行以下操作:
var output = Vacancy.OrderBy(lambda).Take(N).(now join, filter, etc. with other tables);
但是,如果您想将所有类似的状态与空缺一起分组,并且仅在获得热门项目后,请使用GroupBy
:
var output = (logic to join, filter, etc.).GroupBy(st => st.StausId).
.Select(group => group.OrderBy(lambda).Take(N));
推荐阅读
- c# - 在 Visual Studio 2019 中升级 xproj
- mysql - MySQL 导出/导入空/空多行字符串
- ejabberd - Ejabberd源码在windows 10中安装
- java - 持久化新实体后如何使用来自其父实体的信息填充实体中的字段
- java - 我的单词搜索游戏不断崩溃,但在构建它时未检测到错误
- python - 在 Ubuntu 16.4 上打开 edx 安装错误
- datatable - 如何在角度数据表中添加自定义搜索
- python - 在 Python 中触发 sql 查询时出现数据库错误
- android - 如何从 AOSP 构建中删除计算器应用程序
- java - 我们可以在三元运算符(Java)中使用命令吗?