質問

ユーザーがフォームを送信したときに、データベースから削除するレコードを決定しようとしています。 ページには2つのCheckBoxListがあり、1つは変更前のレコードを表し、もう1つは後を表します。

このように削除する必要がある選択された値を簡単に取得できます...

//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); 

アイデアはありますか

役に立ちましたか?

解決

Contains()メソッドを使用して、LINQ to SQLでローカルコレクションを使用できます。 Contains()を使用して、 join 句を where に変更してみてください:

var itemsToDelete = from specialNeed in db.SpecialNeeds
                    where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
                       && specialNeed.CustomerId == customerId
                    select ...;

他のヒント

発生しているエラーは何ですか? SpecialNeedsTypeCdとoldSelectedItem.Valueの型が一致していませんか?この投稿の2番目のLinqステートメントでselectを省略しましたか、それとも問題ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top