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

时间:2011-07-01 18:23:37

标签: c# linq entity-framework

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

这就是我所拥有的:

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

然而,这给了我一个投射错误,我想知道是否有更好的方法来实现这一目标?我看过类似的问题,我看到的每个答案似乎都比实际上要复杂得多,所以任何建议都会很棒!

2 个答案:

答案 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);
}