选择子列表<;T>;具有筛选条件List<;int>;使用Linq
本文关键字:lt gt List 条件 int 使用 Linq 筛选 选择 列表 | 更新日期: 2023-09-27 18:15:20
我很难用Linq生成对象的子列表。
var assignedObject = new List<int>();
foreach (var obj in myObjects) {
if (IsAssigned(obj)) {
assignedObject.add(obj.Id);
}
}
我现在要做的是使用Linq.Where(Func<T,bool> predicate)
从myObjects
中删除已分配的对象。
myObjects = myObject.Where(item => item.Id != assignedObj.All()).ToList();
item.Id != assignedObj.All()
是问题部分。
如果使用Linq可以实现,请教育我。
否则,我将实现一个循环。
var remainingObjects = new List<MyClass>();
foreach(var obj in myObjects) {
if (!(assignedObjects.IndexOf(obj.Id) > -1)) {
remainingObjects.Add(obj);
}
}
附言:如果你想知道从其他地方检索到的List<MyClass> myObjects = GetMyObjects(params);
。
var toRemove = myObjects.Where(item=>assignedObj.Any(a=>a.Id == item.Id)).ToArray()
这样行吗?
您可以使用以下条件重写All()
:
myObjects = myObject
.Where(item => assignedObj.All(assigned => item.Id != assigned.Id))
.ToList();
然而,使用Contains
:更容易
var assignedIds = new HashSet<int>(assignedObject);
myObjects = myObject.Where(item => assignedIds.Contains(item.Id)).ToList();
在assignedObject
相对较大的情况下(例如,数百个或更多对象(,使用HashSet<int>
可以加快查找速度。
它可以是这样的:var list = from item in myObjects where IsAssigned(item) select item
试试这个var assignedObjects = myObjects.Where(m => IsAssigned(m)).ToList()
var remainedObjects = myObjects.Where(m => !IsAssigned(m)).ToList()