当用户提交表单时,我正试图确定要从数据库中删除哪些记录。该页面有两个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);
有什么想法吗?
本地集合可以在LINQ to SQL中使用Contains()方法。您可以尝试将join子句更改为,其中使用Contains():
var itemsToDelete = from specialNeed in db.SpecialNeeds
where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
&& specialNeed.CustomerId == customerId
select ...;
您得到的错误是什么?SpecialNeedsTypeCd和oldSelectedItem.Value之间是否存在类型不匹配?你刚才在这篇文章的第二个Linq语句中遗漏了select,还是这就是问题所在?