如何循环IQueryable并删除一些我不需要的元素。
我正在寻找类似的东西
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
if(IsNotWhatINeed(item))
items.Remove(item);
}
有可能吗?提前致谢
答案 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));