2012-02-29 7 views
9

के साथ एक तालिका में पंक्तियां हटाना मेरे पास एक टेबल समूह के साथ एक स्पोर्ट्स डेटाबेस है जिसमें फ़ील्ड आईडी, groupID और सदस्य आईडी है। मुझे txtRemoveGroupMember नामक टेक्स्टबॉक्स से सदस्य आईडी और चेकबॉक्स सूची से groupID मिलता है। अब मैं उन पंक्तियों को हटाना चाहता हूं जिनमें समूह आईडी और सदस्य आईडी दोनों हैं। मैं इस कोड की कोशिश की है:लिंक से SQL

foreach(ListItem listItem in cblRemoveMemberFromGroup.Items) 
{ 
     int memberid = Convert.ToInt32(txtRemoveGroupMember.Text); 
     int groupid = Convert.ToInt32(listItem.Value); 

     var removeFromGroup = from gm in dataContext.GroupMembers 
      where (gm.memberID == memberid) && (gm.groupID == groupid) 
      select gm; 

     dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup); 
     dataContext.SubmitChanges(); 
} 

लेकिन मैं इस त्रुटि मिलती है: त्रुटि 7 तर्क 1: 'System.Linq.IQueryable' से परिवर्तित नहीं कर सकते करने के लिए 'GSI_side.GroupMember'

और इस त्रुटि: त्रुटि 6 'System.Data.Linq.Table.DeleteOnSubmit (GSI_side.GroupMember) के लिए सबसे अच्छा ओवरलोडेड विधि मिलान कुछ अमान्य तर्क

आशा है कि कोई मुझे यह समझने में मदद कर सकता है!

+0

DeleteOnSubmit को समूहमेन के प्रकार की एक वस्तु की आवश्यकता होती है और linq क्वेरी IQueryable देता है। यही कारण है कि त्रुटि मिल रही है। इसके बजाय removeFromGroup.ToList() का उपयोग करने का प्रयास करें। – Dinesh

उत्तर

13

आप .ToList (कॉल करने के लिए)

var items = removeFromGroup.ToList(); 
foreach (var item in items) 
    dataContext.GroupMembers.DeleteOnSubmit(item); 

बैच मैं this का उपयोग करें, क्योंकि LINQ पहली बार लोड पूरे डेटा जो नष्ट कर दिया जा रहा है SQL करने के लिए, तो यह हटाए गए प्रत्येक प्रत्येक से करता है हटा देता है के लिए है ।

https://terryaney.wordpress.com/2008/04/14/batch-updates-and-deletes-with-linq-to-sql/

https://github.com/longday/LINQ-to-SQL-Batch-Updates-Deletes

+2

बहुत बहुत धन्यवाद! यह पूरी तरह से काम करता है =) – Twistar

+0

@ जेरेमीविगिन के उत्तर देखें, एक DeleteAllOnSubmit() विधि है। –

+0

ये लिंक अब मर चुके हैं, क्या आप एक नए स्थान पर इंगित कर सकते हैं या वे स्पष्ट रूप से समझा सकते हैं कि वे क्या कहते हैं? – Dan

9

removeFromGroup प्रकार IQuerable की अब भी है।

आपको हटाने के लिए एक वास्तविक GroupMember निर्दिष्ट करने की आवश्यकता है।

आप

GroupMember removeFromGroup = (from gm in dataContext.GroupMembers 
           where (gm.memberID == memberid) && (gm.groupID == groupid) 
           select gm).SingleOrDefault(); 


dataContext.GroupMembers.DeleteOnSubmit(removeFromGroup); 
dataContext.SubmitChanges(); 

या फिर, यदि आपकी क्वेरी (यह है, यह जब से तुम memberId द्वारा फ़िल्टर कर रहे हैं नहीं होगा की दिखता से) एक संग्रह रिटर्न आप इस्तेमाल कर सकते हैं इस्तेमाल कर सकते हैं

List<GroupMember> removeFromGroup = (from gm in dataContext.GroupMembers 
            where (gm.memberID == memberid) && (gm.groupID == groupid) 
            select gm).ToList(); 


dataContext.GroupMembers.DeleteAllOnSubmit(removeFromGroup); 
dataContext.SubmitChanges(); 
4
var listToRemove=(from a in DB.Table 
      where a.Equals(id) 
      select a).ToList(); 

DB.Table.DeleteAllOnSubmit(listToRemove); 
DB.SubmitChanges(); 
संबंधित मुद्दे