c# 根据另一个 List 的内容,从自定义列表中移除项目。
c# 根据另一个 List 的内容,从自定义列表中移除项目。
我有一个自定义的List,它返回所有项目。Info的结构如下:
public class Info { public string Code { get; set; } public string ClinicianDescription { get; set; } }
我想要从列表中排除任何Code属性与另一个List中的任何值相等的Info对象。
我想找到一种简洁的方法来做到这一点,我已经尝试使用.Except(),但是我必须将List转换为相同的对象,这似乎是不正确的。
到目前为止,我尝试了类似这样的方法:
Listids = contactList; var List test = info.RemoveAll(x => ids.Any(i => i == x.Code));
问题:如何从一个自定义列表中移除基于另一个List
原因:在某些情况下,我们可能需要从一个自定义列表中删除一些项目,这些项目基于另一个List
解决方法:下面是一种解决方法的示例代码:
Listinfo = new List (); // 填充info列表 List excludeCodes = new List (); // 填充excludeCodes列表 var result = info.Where(i => !excludeCodes.Contains(i.Code)).ToList();
这个解决方法使用了LINQ的Where方法,它接受一个lambda表达式作为参数,用于指定过滤条件。在这个例子中,我们使用!excludeCodes.Contains(i.Code)作为过滤条件,表示只选择那些在excludeCodes列表中不存在的Code值。
最后,将过滤结果转换为列表并赋值给result变量。
通过这种方法,我们可以从自定义列表中移除基于另一个List
问题:为什么不能使用`Contains()`方法来实现以下代码的功能?
List
.Where(i => !ids.Contains(i.Code)).ToList();
[/apcode]
原因:这是因为`Contains()`方法默认使用的是对象的`Equals()`方法来判断是否相等,而在这个例子中,我们需要比较的是整数类型的值。整数类型的比较需要使用`==`运算符,而不是`Equals()`方法。
解决方法:我们可以使用`Any()`方法结合`==`运算符来实现对整数类型的比较。下面是修改后的代码:
Listtest = info .Where(i => !ids.Any(id => id == i.Code)).ToList();
这样,我们就可以正确地从`info`列表中移除那些包含在`ids`列表中的元素了。
问题的出现原因是需要从一个自定义的列表中删除另一个整数列表中的项目,但是在C#中没有直接提供这样的功能。解决方法是使用LINQ的Except方法来实现。下面是解决问题的代码示例:
var blackListCodes = contactList.Select(i => i.ToString()); var test = info.Except(info.Where(i => blackListCodes.Contains(i.Code)));
上述代码将创建一个名为`blackListCodes`的新列表,其中包含将整数转换为字符串的`contactList`列表的元素。然后,使用Except方法从`info`列表中排除那些在`blackListCodes`列表中出现的元素。这将返回一个新的IEnumerable,其中包含在`info`中但不在`blackListCodes`中的元素。
另一种更简化且更高效的方法是将上述代码反转,如下所示:
var test = info.Where(i => !blackListCodes.Contains(i.Code))
这种方法使用Where方法来筛选出`info`列表中那些在`blackListCodes`列表中不出现的元素。
需要注意的是,上述方法都会生成一个新的可枚举对象,而不会直接在现有的`info`列表中更改元素。如果要在原始列表中进行更改,可以使用RemoveAll方法。但需要注意的是,RemoveAll方法返回一个表示从列表中删除的元素数量的整数,不能将其赋值给另一个列表。
此外,需要注意的是,在比较元素时,要确保在`Code`属性的类型与`blackListCodes`列表中的整数类型兼容。如果类型不兼容,则需要在比较之前将其转换为相同的类型。在上述代码中,使用了ToString方法将整数转换为字符串进行比较,因此不会出现类型不兼容的问题。
,要从一个自定义列表中删除另一个整数列表中的项目,可以使用LINQ的Except方法或Where方法来实现。这些方法都会生成一个新的可枚举对象,而不会直接更改原始列表中的元素。如果需要在原始列表中进行更改,可以使用RemoveAll方法,但需要注意其返回值的类型。另外,还需要确保在比较元素时,类型兼容性的问题。