c# Linq查询,选择满足条件的顶部结果
本文关键字:条件 顶部 结果 满足 选择 Linq 查询 | 更新日期: 2023-09-27 18:10:33
请原谅我的英语,但我会解释我正在努力实现的目标。标题可能比较模糊。
我正在开发一个工资单程序,需要查询月表,以便选择使用linq处理的月份。它是用于SAP Business 1附加组件的。
我的月表(缩短)
Code U_Month U_Pay_Process_Status
1 Jan Y
2 Feb Y
3 March Y
4 April N
5 May N
6 June N
7 July N
8 Aug N
9 Sept N
10 Oct N
11 Nov N
12 Dec N
一旦一个工资单月被处理,例如一月,该月的U_Pay_Process_Status字段更改为Y (Yes)
对于上面的表,我如何编写linq to sql查询来选择第一个未处理的月份(在本例中是4月)?
我现在有这个
Code是SAP中自动生成的主键,类型为varchar。
// Get service instance needed
var monthlyPeriodService = Program.Kernel.Get<IMonthlyPeriodService>();
//Query database monthly periods
var monthlyPeriods = monthlyPeriodService.GetAllMonthlyPeriods().OrderBy(m => m.Code);
To do.......
如何获得第一个未处理的月份。
不如这样写:
var firstUnprocessed = monthlyPeriodService.GetAllMonthlyPeriods()
.Where(m => !m.Processed)
.OrderBy(m => m.Code)
.FirstOrDefault();
请注意,如果所有的周期都被处理过,那么这将返回null(这就是OrDefault
位为您所做的)。
另外:
var firstUnprocessed = monthlyPeriodService.GetAllMonthlyPeriods()
.OrderBy(m => m.Code)
.FirstOrDefault(m => !m.Processed);
前一个版本在排序结果之前过滤掉处理过的项;如果查询是在进程中执行的,这将使它更有效率(尽管效率是否显著是另一回事);如果使用LINQ提供程序将查询转换为SQL或类似的东西,则不太可能发生问题。
尝试使用以下方法
monthlyPeriods.FirstOrDefault()