如何将foreach循环转换为LINQ语句?

vh0rcniy  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(184)
foreach (var item in pList)
{
    if (item.PDate> Calendar.GetAppDate() && dtoPP.pLastDate < item.pLastDate)
    {
        dtoPP= item;
    }
}

我试着那样做,但是我在哪里可以做赋值(dtoPP= item;)那部分?

pList.Where(item => item.PDate> Calendar.GetAppDate() && dtoPP.pLastDate < item.pLastDate ).ToList();
w7t8yxp5

w7t8yxp51#

要查找PDate大于Calendar.GetAppDate()的最后一个项目,可以使用以下查询(假设PDatepLastDateDateTime,或其他类似类型):

var appDate = Calendar.GetAppDate();
var latestItem = pList
    .Where(i => i.PDate > appDate) // filter out any items where PDate <= appDate
    .OrderBy(i => i.pLastDate) // sort by pLastDate ascending (oldest to newest)
    .LastOrDefault(); // get the last item or default (null for reference types)

注意,我缓存Calendar.GetAppDate();的结果是为了避免在处理pList时重复计算它。

wnavrhmk

wnavrhmk2#

您可以使用LINQ Max方法在pList中查找最大值为pLastDate的元素,其中PDate大于Calendar.GetAppDate():

dtoPP = pList.Where(i => i.PDate > Calendar.GetAppDate())
             .Max(i => i.pLastDate);
tgabmvqs

tgabmvqs3#

这里有两种方法可以工作。(未经测试)

var result = pList.LastOrDefault(item => item.PDate > Calendar.GetAppDate() && dtoPP.pLastDate < item.pLastDate);
var result = pList.Where(item => item.PDate > Calendar.GetAppDate() && dtoPP.pLastDate < item.pLastDate).LastOrDefault();

相关问题