LINQ صلة داخلية بين Ienumerable وDB الجدول
-
05-07-2019 - |
سؤال
وأنا أحاول لتحديد الذي يسجل لحذف من قاعدة البيانات عند قيام مستخدم بإرسال النموذج. الصفحة اثنين 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؟ هل مجرد حذف حدد في بيان ينق الثاني في هذا المنصب أو هو أن المشكلة؟