سؤال

وأنا أحاول لتحديد الذي يسجل لحذف من قاعدة البيانات عند قيام مستخدم بإرسال النموذج. الصفحة اثنين 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 إلى SQL مع أسلوب يحتوي على (). يمكنك محاولة تغيير بند <م> الانضمام إلى <م> حيث مع يحتوي على ():

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

نصائح أخرى

ما هو الخطأ الذي تحصل؟ هل هو عدم تطابق نوع بين SpecialNeedsTypeCd وoldSelectedItem.Value؟ هل مجرد حذف حدد في بيان ينق الثاني في هذا المنصب أو هو أن المشكلة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top