繁体   English   中英

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

[英]C# Linq query to select top result where a condition is satisfied

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

我正在开发一个薪资程序,需要查询月度表以选择要使用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(是)

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

我到目前为止

代码是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();

请注意,如果所有期间都已处理(这就是OrDefault位为您执行的操作),它将返回null。

或者:

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

前一个版本订购结果之前会过滤掉已处理的项目。 如果查询是在过程中执行的,这将使其效率更高(尽管效率是否显着 )。 如果这使用的是LINQ提供程序,该提供程序会将查询转换为SQL或类似的内容,那就没关系了。

尝试使用以下方法

monthlyPeriods.FirstOrDefault()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM