选择子列表<;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);

选择子列表<;T>;具有筛选条件List<;int>;使用Linq

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()