LINQ:如何从IQueryable 中删除元素

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

我正在寻找这样的东西

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

可能吗? 提前致谢

您应该能够进一步查询

 var filtered = items.Where(itm => IsWhatINeed(itm)); 

还要注意布尔函数的细微变化是肯定的而不是消极的。 那个(负面的)是非运营商的用途。

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

要么

 var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId) .Where(x=> !IsNotWhatINeed(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理解的东西。

试试这个:

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