1

ユーザーがフォームを送信したときにデータベースから削除するレコードを決定しようとしています。このページには、変更前と変更後のレコードを表す 2 つの 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 で使用できます。Join句を、Contains() を使用して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 の型の不一致ですか? この投稿の 2 番目の Linq ステートメントで select を省略しただけですか、それとも問題ですか?

于 2008-10-07T21:31:39.233 に答える