C# LINQ:如何从IQueryable中删除元素<;T>;

C# LINQ:如何从IQueryable中删除元素<;T>;,c#,linq,iqueryable,C#,Linq,Iqueryable,如何循环通过IQueryable并删除一些我不需要的元素 我在找这样的东西 var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId); foreach(Item item in items) { if(IsNotWhatINeed(item)) items.Remove(item); } 可能吗?提前感谢您应该能够在本节中进一步查询该问题 items = items.Where(

如何循环通过IQueryable并删除一些我不需要的元素

我在找这样的东西

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
  if(IsNotWhatINeed(item))
    items.Remove(item); 
}

可能吗?提前感谢

您应该能够在本节中进一步查询该问题

items = items.Where( x => !IsNotWhatINeed(x) );
var filtered = items.Where(itm => IsWhatINeed(itm));
还要注意布尔函数中的细微变化,它是肯定的,而不是否定的。这(负数)就是
not
操作符的作用

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatINeed(x));

试试这个:

var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId 
    && !IsNotWhatYouNeed(x));

其他答案是正确的,因为您可以使用“where”语句进一步细化查询。但是,我假设您的查询是一个Linq2Sql查询。因此,在使用自定义函数进行进一步筛选之前,您需要确保内存中有数据:

var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId)
    .ToList(); // fetch the data in memory

var itemsToRemove = items.Where(IsNotWhatINeed);

如果您真的想扩展IQueryable,那么必须将“IsNotWhatINeed”函数转换为Linq2Sql能够理解的内容。

使用这样一个乐观积极的函数,您还可以编写
项。其中(IsWhatINeed)
。函数的积极版本还消除了双重消极的情况:
!ISNOTWATINEED()
我想在LINQ中添加这一点,与所有函数代码一样,更可取的做法是通过应用过滤器从旧列表中获取新列表,而不是对其进行更改。谢谢jeroenh,请您解释或给我举个例子说明什么是Linq2Sql查询以及Linq2Sql理解什么?谢谢
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId)
    .ToList(); // fetch the data in memory

var itemsToRemove = items.Where(IsNotWhatINeed);