如何将以下内容分别转换为Linq,并在可能的情况下将If语句也包含到Linq中??
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();
答案 0 :(得分:0)
Where
只会返回一个新集合,而不会修改现有集合。这就是LINQ中的Q所代表的:查询。这意味着linq不是经过设计的,因此在修改集合时并不是很好。这就是为什么在修改集合中的元素时不应该使用LINQ。
如果您的GetInvalidFields
方法返回了List<T>
,则可以执行以下操作:
DataObjectManager.GetInvalidFields().RemoveAll(x => x.ControlName == "tbMCBNumber");
但这不是LINQ,它只是ICollection<T>
实现的List<T>
的一种方法。
或者,您可以使用一个向后折叠的for循环,以从其中删除一些项:
var list = DataObjectManager.GetInvalidFields();
for(int i = list.Count - 1; i >= 0; i--)
{
if(list[i].ControlName == "tbMCBNumber").Remove(list[i]);
}
但是,这假设您甚至可以修改GetInvalidFields
返回的底层集合。如果该方法返回的内容根本无法修改,例如ReadOnlyCollection
或仅是迭代器,则无法删除其中的项目。