为什么我不能选择删除或删除?我想从列表中删除记录
IEnumerable<StockLocation_Table> AllCurrentStocklocations = db.StockLocation_Table.ToList();
List<StockLocation> StockLocations = ServerHelper.GetStockLocationsBatch(BatchUrl, i, batchSize);
foreach (StockLocation_Table _stock_table in AllCurrentStocklocations)
{
foreach (StockLocation _stock in StockLocations)
{
if (_stock.ServerLocationId == _stock_table.ServerLocationId)
{
AllCurrentStocklocations.?? why cant i say remove._stock_table
}
}
}
答案 0 :(得分:2)
因为它是IEnumerable<T>
而Remove
方法未在IEnumerable<T>
中定义。由于您使用ToList
,只需使用List<T>
作为类型:< / p>
List<StockLocation_Table> AllCurrentStocklocations = db.StockLocation_Table.ToList();
编辑:你也无法修改 foreach 循环中的集合。你可以改用LINQ:
var AllCurrentStocklocations = db.StockLocation_Table
.Where(x => !StockLocations
.Any(s => s.ServerLocationId == x.ServerLocationId).ToList()
答案 1 :(得分:2)
您要在此处执行的操作是从数据库表中获取ID不在此列表中的所有项目。你应该在这里做的是构造一个查询,这样你只得到那些没有这些ID的项目,而不是将整个数据库表拉入一个列表,然后通过另一个列表获取每个项目)查找ID,以便您可以从此列表中删除当前项。除了 super 效率低之外,这还意味着从正在迭代的集合中删除项目,这将破坏迭代器。而是写一些可以翻译成数据库查询的东西:
List<StockLocation> stockLocations = ServerHelper.GetStockLocationsBatch(
BatchUrl, i, batchSize);
var locationIDs = stockLocations.Select(location => location.ServerLocationId);
db.StockLocation_Table.Where(item =>
!locationIDs.Contains(item.ServerLocationId));