我在代码隐藏中获取数据库表中条目的ID,并且我试图找到一个简单的LINQ查询来根据ID删除条目。
这就是我所拥有的:
DataContext.Items.DeleteObject((Item)DataContext.Items.Where(item => item.ItemId == selectedId));
然而,这给了我一个投射错误,我想知道是否有更好的方法来实现这一目标?我看过类似的问题,我看到的每个答案似乎都比实际上要复杂得多,所以任何建议都会很棒!
答案 0 :(得分:11)
您目前有一个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);
答案 1 :(得分: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);
}