C# 在C中将包含if语句的foreach循环转换为linq方法语法#

C# 在C中将包含if语句的foreach循环转换为linq方法语法#,c#,linq,C#,Linq,我试图用方法语法将其转换为linq语句。当foreach循环有一个if语句时,我不知道该怎么做。在下面的代码中,MyMethodToConvert将字符串“明天”替换为DateTime.Now foreach (var data in MyCollection) { if (data.DeliveryDate.Equals("Tomorrow")) { data.DeliveryDate = MyMe

我试图用方法语法将其转换为linq语句。当foreach循环有一个if语句时,我不知道该怎么做。在下面的代码中,MyMethodToConvert将字符串“明天”替换为DateTime.Now

foreach (var data in MyCollection)
        {
            if (data.DeliveryDate.Equals("Tomorrow"))
            {
                data.DeliveryDate = MyMethodToConvert(DeliveryDate);
            }
        }
我试过了,没用

MyCollection = MyCollection.Select(a =>
                {
                    a.DeliveryDate.Equals("Tomorrow")
                        ? MyMethodToConvert(DeliveryDate)
                        : a.DeliveryDate)
                    ;
                    return a;
        }).ToList();
但它不起作用。

仅此而已:

foreach (var data in MyCollection.Where(x => x.DeliveryDate.Equals("Tomorrow")))
{
    data.DeliveryDate = MyMethodToConvert(DeliveryDate);
}
如果
x.DeliveryDate
的编译时类型为
string
,则首选:

foreach (var data in MyCollection.Where(x => x.DeliveryDate == "Tomorrow"))
{
    data.DeliveryDate = MyMethodToConvert(DeliveryDate);
}
只能走这么远:

foreach (var data in MyCollection.Where(x => x.DeliveryDate.Equals("Tomorrow")))
{
    data.DeliveryDate = MyMethodToConvert(DeliveryDate);
}
如果
x.DeliveryDate
的编译时类型为
string
,则首选:

foreach (var data in MyCollection.Where(x => x.DeliveryDate == "Tomorrow"))
{
    data.DeliveryDate = MyMethodToConvert(DeliveryDate);
}
这个怎么样:

MyCollection.Where(d => d.DeliveryDate.Equals("Tomorrow"))
            .ToList()
            .ForEach(d => d.DeliveryDate = MyMethodToConvert(DeliveryDate));
这个怎么样:

MyCollection.Where(d => d.DeliveryDate.Equals("Tomorrow"))
            .ToList()
            .ForEach(d => d.DeliveryDate = MyMethodToConvert(DeliveryDate));
你可以用这个:

MyCollection = MyCollection.Select(data =>
{
    if (data.DeliveryDate.Equals("Tomorrow"))
        data.DeliveryDate = MyMethodToConvert(DeliveryDate);
    return data;
}).ToList();
或者,如果您的代码中不需要任何分号(我假设您有一个名为Delivery的类,该类的构造函数仅用于DeliveryDate):

但是,我不建议在这里使用Linq。Linq唯一有用的一点用途是Jeppe Stig Nielsen建议的功能。

您可以使用以下功能:

MyCollection = MyCollection.Select(data =>
{
    if (data.DeliveryDate.Equals("Tomorrow"))
        data.DeliveryDate = MyMethodToConvert(DeliveryDate);
    return data;
}).ToList();
或者,如果您的代码中不需要任何分号(我假设您有一个名为Delivery的类,该类的构造函数仅用于DeliveryDate):


但是,我不建议在这里使用Linq。Linq唯一一点有用的用途就是Jeppe Stig Nielsen所建议的。

Linq能使代码简洁明了,非常棒。当LINQ掩盖了正在发生的事情时,它并不伟大。您的
foreach
的目的和结果是明确的。不要改变它。LINQ是伟大的,它使代码简洁明了。当LINQ掩盖了正在发生的事情时,它并不伟大。您的
foreach
的目的和结果是明确的。不要改变,这是一个很好的方法。在提供紧凑表单的同时保持可读性。:)这是一个很好的方法。在提供紧凑表单的同时保持可读性。:)