C# 如何将以下代码(foreach和if)转换为c中的linq?
如何将以下各项转换为Linq,如果可能,还包括将if语句转换为LinqC# 如何将以下代码(foreach和if)转换为c中的linq?,c#,.net,linq,C#,.net,Linq,如何将以下各项转换为Linq,如果可能,还包括将if语句转换为Linq public class InvalidDataType { public string ViewName { get; set; } public string ControlName { get; set; } public string DataValue { get; set; } } foreach (InvalidDataType invalidF
public class InvalidDataType
{
public string ViewName { get; set; }
public string ControlName { get; set; }
public string DataValue { get; set; }
}
foreach (InvalidDataType invalidField in DataObjectManager.GetInvalidFields())
{
if (invalidField.ControlName == "tbMCBNumber")
{
fieldToRemove = invalidField;
break;
}
}
if (fieldToRemove != null)
{
DataObjectManager.GetInvalidFields().Remove(fieldToRemove);
}
这是我试过的代码
DataObjectManager.GetInvalidFields().Where(x => x.ControlName == "tbMCBNumber").Remove();
如果只返回一个新集合,则不会修改现有集合。这就是LINQ中的Q所代表的:查询。这意味着linq不是专门设计的,因此在修改集合时不是很好。这就是为什么在修改集合中的元素时不应该使用LINQ
如果GetInvalidFields方法返回列表,则可以执行以下操作:
DataObjectManager.GetInvalidFields().RemoveAll(x => x.ControlName == "tbMCBNumber");
然而,这不是LINQ,它只是一种ICollection方法,由List实现
或者,您可以使用一个向后输入的for循环,以便从中删除某些项:
var list = DataObjectManager.GetInvalidFields();
for(int i = list.Count - 1; i >= 0; i--)
{
if(list[i].ControlName == "tbMCBNumber").Remove(list[i]);
}
但是,这假设您甚至可以修改GetInvalidFields返回的基础集合。如果该方法返回一些根本无法修改的内容,比如ReadOnlyCollection或只是一个迭代器,则无法从中删除项。恐怕这不是一个代码编写服务。你需要展示一些努力,并向我们展示你的尝试。为什么不自己动手呢?我们为什么要做你的工作?这是一种尝试和思考。当你有一个特定的问题时,你可能会在这里问。还有,是什么让你认为Linq是一个好的解决方案?