从 DataContext 删除 ID == ID 的简单 LINQ 查询

问题描述 投票:0回答:2

我在代码隐藏中获取数据库表中条目的 ID,并尝试找到一个简单的 LINQ 查询来根据 ID 删除该条目。

这是我所拥有的:

DataContext.Items.DeleteObject((Item)DataContext.Items.Where(item => item.ItemId == selectedId));

但这给了我一个转换错误,我想知道是否有更好的方法来完成这个?我看过类似的问题,我看到的每个答案似乎都比实际应该的更复杂,所以任何建议都会很棒!

c# linq entity-framework
2个回答
12
投票

您当前有一个

IQueryable<Item>
,而不是物品 - 使用
Single()
获取物品本身:

var item = DataContext.Items.Where(item => item.ItemId == selectedId).Single();
DataContext.Items.DeleteObject(item);

这假设有一个匹配的项目(ID 作为主键),否则请考虑使用

First()
FirstOrDefault()
进行空检查,或者如果您有项目集合,只需在循环中删除它们:

var items = DataContext.Items.Where(item => item.ItemId == selectedId);
foreach(var item in items)
  DataContext.Items.DeleteObject(item);

2
投票
DataContext.Items.DeleteObject((Item)DataContext.Items.Where(item => item.ItemId == selectedId).First());

不要忘记防止错误,您需要确保您正在检查的 ID 是真实的

Item
。例如这样的事情:

var item = (Item)DataContext.Items.Where(item => item.ItemId == selectedId).FirstOrDefault();

if (item != null) {
    DataContext.Items.DeleteObject(item);
}
© www.soinside.com 2019 - 2024. All rights reserved.