我正在尝试确定当用户提交表单时要从数据库中删除哪些记录。 该页面有两个CheckBoxList,一个表示修改前的记录,另一个表示后面的记录。
我可以轻松获取需要删除的选定值...
//get the items not selected that were selected before
var oldSelectedItems = from oItem in oldChklSpecialNeeds.Items.Cast<ListItem>()
where !(from nItem in newChklSpecialNeeds.Items.Cast<ListItem>()
where nItem.Selected
select nItem.Value).Contains(oItem.Value)
&& oItem.Selected
select oItem.Value;
现在我正在尝试做这样的事情,但它不允许......
var itemsToDelete = from specialNeed in db.SpecialNeeds
join oldSelectedItem in oldSelectedItems on specialNeed.SpecialNeedsTypeCd equals oldSelectedItem.Value
where specialNeed.CustomerId == customerId
我可以轻松地为每个项目使用foreach循环和.DeleteOnSubmit(),但我认为有一种方法可以使用LINQ的功能并将内部联接的整个查询结果传递给.DeleteAllOnSubmit()
//like so
db.SpecialNeeds.DeleteAllOnSubmit(itemsToDelete);
有什么想法吗?
答案 0 :(得分:4)
可以使用Contains()方法在LINQ to SQL中使用本地集合。您可以尝试使用Contains()将 join 子句更改为 where :
var itemsToDelete = from specialNeed in db.SpecialNeeds
where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
&& specialNeed.CustomerId == customerId
select ...;
答案 1 :(得分:0)
你得到的错误是什么?它是SpecialNeedsTypeCd和oldSelectedItem.Value之间的类型不匹配吗?您是否刚刚在本文中省略了第二个Linq语句中的select或者问题是什么?