C#Linq查询选择满足条件的顶级结果

C#Linq查询选择满足条件的顶级结果,c#,linq,C#,Linq,请原谅我的英语,但我会解释我正在努力实现的目标。标题可能含糊不清 我正在开发一个工资单程序,需要查询一个月表,以便选择使用linq处理的月份。它适用于SAP Business 1附加组件 我的月表(缩短) 处理工资单月份后,例如一月,该月份的“U_Pay_Process_状态”字段将更改为Y(是) 对于上表,我将如何编写linq到sql查询来选择第一个未处理的月份(在本例中为四月) 到目前为止,我有这个 代码是SAP中自动生成的主键,类型为varchar // Get service insta

请原谅我的英语,但我会解释我正在努力实现的目标。标题可能含糊不清

我正在开发一个工资单程序,需要查询一个月表,以便选择使用linq处理的月份。它适用于SAP Business 1附加组件

我的月表(缩短)

处理工资单月份后,例如一月,该月份的“U_Pay_Process_状态”字段将更改为Y(是)

对于上表,我将如何编写linq到sql查询来选择第一个未处理的月份(在本例中为四月)

到目前为止,我有这个

代码是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 monthlyPeriodService=Program.Kernel.Get();
//查询数据库每月周期
var monthlyPeriods=monthlyPeriodService.GetAllMonthlyPeriods().OrderBy(m=>m.Code);
做。。。。。。。

如何获取未处理的第一个月。非常感谢您的帮助。

您想做些什么

var firstUnprocessed = monthlyPeriodService.GetAllMonthlyPeriods()
                                           .Where(m => !m.Processed)
                                           .OrderBy(m => m.Code)
                                           .FirstOrDefault();
请注意,如果已处理所有时段,则返回null(这是
或default
位为您所做的)

或者:

var firstUnprocessed = monthlyPeriodService.GetAllMonthlyPeriods()
                                           .OrderBy(m => m.Code)
                                           .FirstOrDefault(m => !m.Processed);

前一版本在排序结果之前过滤掉处理过的项目;如果查询是在过程中执行的,这将提高效率(尽管效率是否显著是另一个问题);如果这是使用LINQ提供程序将查询转换为SQL或类似的内容,那么这不太重要。

尝试使用以下方法

monthlyPeriods.FirstOrDefault()

再次感谢乔恩·斯基特。我不能只使用.FirstOrDefault(m=>m.U\U Pay\U Process\U Status==“N”);要获得结果?只有在您能够确保月份已排序的情况下,FirstOrDefault才会返回它到达的第一个未处理月份,如果您的数据库未排序,则该月份可能不一定是您想要的月份。如果您的数据已经订购,那么再次订购相对便宜,那么为什么不呢?
monthlyPeriods.FirstOrDefault()