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.......

如何获得第一个未处理的月份。

c# Linq查询,选择满足条件的顶部结果

不如这样写:

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