[英]Coverting a foreach loop containing an if statement into linq method syntax in C#
我正在尝试使用方法语法将此转换为linq语句。 我不确定在foreach循环中有if语句时该怎么做。 在下面的代码中,MyMethodToConvert将字符串“ Tomorrow”替换为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);
}
您可以使用此:
MyCollection = MyCollection.Select(data =>
{
if (data.DeliveryDate.Equals("Tomorrow"))
data.DeliveryDate = MyMethodToConvert(DeliveryDate);
return data;
}).ToList();
或者,如果你不想在你的代码中的任何分号(我假设你有只是为了DeliveryDate构造一个名为交货类):
MyCollection = MyCollection.Select(data => data.DeliveryDate.Equals("Tomorrow")
? new Delivery(MyMethodToConvert(DeliveryDate))
: data).ToList();
但是,我不建议在这里使用Linq。 Linq唯一有用的用途就是Jeppe Stig Nielsen提出的建议。
这个怎么样:
MyCollection.Where(d => d.DeliveryDate.Equals("Tomorrow"))
.ToList()
.ForEach(d => d.DeliveryDate = MyMethodToConvert(DeliveryDate));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.