1

我试图确定当用户提交表单时要从数据库中删除哪些记录。该页面有两个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); 

有任何想法吗?

4

2 回答 2

4

本地集合可以通过 Contains() 方法在 LINQ to SQL 中使用。您可以尝试使用 Contains()将join子句更改为where :

var itemsToDelete = from specialNeed in db.SpecialNeeds
                    where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
                       && specialNeed.CustomerId == customerId
                    select ...;
于 2008-10-07T22:36:19.883 回答
0

你得到什么错误?SpecialNeedsTypeCd 和 oldSelectedItem.Value 之间的类型不匹配吗?您是否只是在这篇文章的第二个 Linq 语句中省略了 select 或者这是问题所在?

于 2008-10-07T21:31:39.233 回答