我有一个List<businessobject>对象集合和一个List<string>对象集合。我想过滤我的List<businessobject>,这样如果业务对象中的某个属性等于List<string>,它就会被过滤掉。我可以考虑这样写代码,但是有没有更快或者更好的方法呢?
List<businessobject> bo = loadBusinessObjectList();
List<string> stringList = loadStringList();
foreach(businessobject busobj in bo){
if(stringList.contains(busobj.myProperty))
bo.remove(busobj)
}发布于 2012-08-07 03:17:08
比到目前为止发布的其他代码简单得多。
bo.Where(o => !stringList.Contains(o.MyProperty));发布于 2012-08-07 02:27:09
您的原始代码实际上将不起作用,因为您修改了您正在枚举的列表。
你可以这样做:
List<businessobject> bo = loadBusinessObjectList();
List<string> stringList = loadStringList();
var matches = (from b in bo where stringList.Contains(b.SomeProperty) select b);
var bo = bo.Intersect(matches);如果您修改
List<string> stringList成为
HashSet<string> stringList性能将会提高,特别是如果字符串的数量很大,因为列表成员关系的测试是O(n),而哈希集成员关系的测试接近O(1)。
发布于 2012-08-07 02:26:41
Linq是你的朋友!
List<businessobject> boList = loadBusinessObjectList();
List<string> stringList = loadStringList();
var badObjects = from bo in boList
where stringList.Contains(bo.myProperty)
select bo;
boList.RemoveRange(badObjects); https://stackoverflow.com/questions/11833774
复制相似问题