2008-11-25 13 views
8

के लिए समर्थित नहीं है किसी कारण से मेरा कोड काम नहीं करेगा।LINQtoSQL त्रुटि: अनुक्रम ऑपरेटर प्रकार 'System.String'

from tan in TANS 
    where tan.ID.ToString().Count() != 1 
    select tan 

मैं सभी आईडी तो मैं गिनती उपयोग कर रहा हूँ एक तालिका में डुप्लिकेट हैं का चयन करना चाहते हैं! = 1 और मैं इस त्रुटि मिलती है।

NotSupportedException: अनुक्रम ऑपरेटरों प्रकार के लिए 'System.String'

सहायता समर्थित नहीं हैं?

उत्तर

13

tan.ID.ToString() एक स्ट्रिंग है, संग्रह नहीं है ताकि आप गणना() लागू नहीं कर सकें।

मेरा मानना ​​है कि आप की तरह कुछ हैं: (यह वाक्य रचना गलत है, लेकिन करीब)

from tan in TANS 
group tan by tan.ID into dups 
where dups.Count() > 1 
select dups.Key; 

अद्यतन (5 वर्ष शून्य से 5 दिनों के बाद): (यह गूगल के लिए एक सा अजीब एक समस्या है और का उत्तर नहीं मिलता आपने लिखा ..) इस समस्या के मूल में LINQ कथन एक SQL कथन बनाने की कोशिश कर रहा है, और डेटाबेस को पता नहीं है कि एक स्ट्रिंग में गणना() को कैसे लागू करें। हालांकि, यदि आप स्मृति में संग्रह के विरुद्ध LINQ का उपयोग करते हैं, तो यह स्ट्रिंग को एक आईनेमरेबल के रूप में मानता है और गणना() ठीक काम करेगा।

5

जेम्स का जवाब मुझे लगता है कि आप जो चाहते हैं उसके करीब है, अगर आप चाहते हैं कि आईडी का मूल्य स्वयं ही उसके साथ जाए। यदि आप ऑब्जेक्ट चाहते हैं तो आईडी को यह करने के लिए असाइन किया गया है।

var dupes = (from tan in TANS 
      group tan by tan.ID.ToString() into duplicates 
      where duplicates.Count() > 1 
      select duplicates.Select(d => d)).SelectMany(d => d); 

LINQ में ऐसा करने का सबसे साफ तरीका मुझे यकीन है। अगर मैं इसे करने के लिए क्लीनर तरीके से आया हूं तो मैं इसे यहां संपादित कर दूंगा। वह SelectMany महत्वपूर्ण है क्योंकि यह IGrouping से ऑब्जेक्ट्स की सूची को फ़्लैट करता है।

संबंधित मुद्दे