如何遍历IQueryable并删除我不需要的元素。
我正在寻找类似于以下代码:
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
if(IsNotWhatINeed(item))
items.Remove(item);
}
这是可能的吗?提前致谢。
如何遍历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));
还要注意布尔函数从否定变成了肯定,这是not
运算符的作用。
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));
items.Where(IsWhatINeed)
。 - Kobi!IsNotWhatINeed()
的肯定版本为IsWhatINeed()
。 - Adam Naylor