IenumerableとDBテーブル間のLINQ内部結合
-
05-07-2019 - |
質問
ユーザーがフォームを送信したときに、データベースから削除するレコードを決定しようとしています。 ページには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を省略しましたか、それとも問題ですか?
所属していません StackOverflow