C#Linq查询选择满足条件的最高结果

时间:2011-10-04 06:37:20

标签: c# linq

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

我正在开发一个Payroll程序,需要查询每月表,以便选择使用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

处理完工资月后,例如1月,该月的U_Pay_Process_Status字段更改为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.......

如何获得第一个未处理的月份。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

如下:

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

请注意,如果所有句点都已处理(这是OrDefault位为您执行的操作),则返回null。

可替换地:

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

前一版本在订购结果之前过滤掉处理过的商品;如果在进程中执行查询,这将使其更有效(尽管效率是否重要是否是另一个问题);如果这是使用LINQ提供程序将查询转换为SQL或类似的东西,则不太可能重要。

答案 1 :(得分:0)

尝试使用以下方法

monthlyPeriods.FirstOrDefault()