LINQ:如何从IQueryable <t> </t>中删除元素

时间:2010-05-30 04:24:51

标签: 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); 
}

有可能吗?提前致谢

5 个答案:

答案 0 :(得分:12)

您应该能够进一步查询,如此

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

还要注意布尔函数的微妙变化是肯定的而不是消极的。那个(负面)是not运算符的用途。

答案 1 :(得分:9)

items = items.Where( x => !IsNotWhatINeed(x) );

答案 2 :(得分:3)

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

答案 3 :(得分:2)

其他答案是正确的,您可以使用'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理解的东西。

答案 4 :(得分:1)

试试这个:

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