LINID内部连接在Ienumerable和DB Table之间

时间:2008-10-07 21:06:18

标签: .net linq inner-join enumerable dbtable

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

有什么想法吗?

2 个答案:

答案 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或者问题是什么?