4th*_*ace 0 .net c# linq linq-to-objects list
我需要从HttpSession集合中删除项目.在以下代码中,myList包含与Session相同的项目.如果myList/Session中的项目不在itemsToRemove中,则应从会话集合中删除它们.
但是,我不确定lambda语法应该是什么样子.以下是不正确的.
myList.ForEach(x => !itemsToRemove.Contains(x) { Session.Remove(x) });
Run Code Online (Sandbox Code Playgroud)
任何想法如何使用lambda表达式将所有内容放在一行来完成此任务?
另外,有没有办法避免创建中间列表(myList)?我只是这样做,因为我在迭代它时不能从Session中删除项目.
最天真的方式:
myList.Where(x => !itemsToRemove.Contains(x)) // LINQ extension method
.ToList() <----
.ForEach(x => Session.Remove(x)); // List<T> method so this is required |
Run Code Online (Sandbox Code Playgroud)
你也可以使用这个:
mystList.Except(itemsToRemove)
.ToList()
.ForEach(x => Session.Remove(x));
Run Code Online (Sandbox Code Playgroud)
但要使用ForEach底层类型应该是List<T>首先需要调用ToList().是什么导致整个集合的过度枚举.
我会这样做:
foreach (var x in mystList.Except(itemsToRemove))
{
Session.Remove(x)
}
Run Code Online (Sandbox Code Playgroud)
这将最大限度地减少枚举数量.