枚举和DB表之间的LINQ内部联接



当用户提交表单时,我正试图确定要从数据库中删除哪些记录。该页面有两个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,还是这就是问题所在?

相关内容

  • 没有找到相关文章

最新更新