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