C# LINQ:如何从IQueryable中删除元素<;T>;
如何循环通过IQueryable并删除一些我不需要的元素 我在找这样的东西C# LINQ:如何从IQueryable中删除元素<;T>;,c#,linq,iqueryable,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); } 可能吗?提前感谢您应该能够在本节中进一步查询该问题 items = items.Where(
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId);
foreach(Item item in items)
{
if(IsNotWhatINeed(item))
items.Remove(item);
}
可能吗?提前感谢您应该能够在本节中进一步查询该问题
items = items.Where( x => !IsNotWhatINeed(x) );
var filtered = items.Where(itm => IsWhatINeed(itm));
还要注意布尔函数中的细微变化,它是肯定的,而不是否定的。这(负数)就是not
操作符的作用
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId
&& !IsNotWhatINeed(x));
或
试试这个:
var items = YourDataContext.Items.Where(x => x.Container.ID == myContainerId
&& !IsNotWhatYouNeed(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能够理解的内容。使用这样一个乐观积极的函数,您还可以编写
项。其中(IsWhatINeed)
。函数的积极版本还消除了双重消极的情况:!ISNOTWATINEED()
我想在LINQ中添加这一点,与所有函数代码一样,更可取的做法是通过应用过滤器从旧列表中获取新列表,而不是对其进行更改。谢谢jeroenh,请您解释或给我举个例子说明什么是Linq2Sql查询以及Linq2Sql理解什么?谢谢
var items = MyDataContext.Items.Where(x => x.Container.ID == myContainerId)
.ToList(); // fetch the data in memory
var itemsToRemove = items.Where(IsNotWhatINeed);