2012-05-04 17 views
5

यहाँ मेरी क्वेरी:त्रुटि() को फिल्टर

var x = db 
    .Users 
    .Where(u => u.Locations.Any(l => searchedLocation.Counties.Any(c => c.LocationId == l.LocationId)); 

प्रसंग:

  • UsersIQueryable<User> है। (ईएफ ऑब्जेक्ट सेट)
  • searchedLocationLocation ऑब्जेक्ट है।
  • CountiesICollection<MiniLocation> है।

क्या मुझे क्या करना कोशिश कर रहा हूँ:

वापसी सभी उपयोगकर्ताओं, जहां उन स्थानों के लिए काउंटी में से किसी की खोज स्थान से संबंधित काउंटियों में से किसी भी एक locationId है।

उदाहरण: बॉब: न्यूयॉर्क शहर (LocationId = 1. County1LocationId = 2)

उपयोगकर्ता के लिए

खोजें। स्थान: सोहो। काउंटी 1LocationId = 2. काउंटी 2 स्थान आईडी = 3.

तो यह एक मैच है। (क्योंकि सोहो 2 के एक LocationId के साथ एक काउंटी है, और इसलिए NYC करता है)

त्रुटि मैं प्राप्त करते हैं:

प्रकार 'xxx.xxx.Locations.MiniLocation' की एक निरंतर मूल्य बनाने में असमर्थ । इस संदर्भ में केवल आदिम प्रकार (जैसे इंट 32, स्ट्रिंग, और ग्विड ') समर्थित हैं।

कोई विचार?

+0

आप .Join के साथ प्रयास करें() किया? –

उत्तर

1

यह MSDN page बताता है कि यह निर्माण समर्थित नहीं है। Any के उपयोग को बदलने में मदद के लिए आप this method का उपयोग नेट 3.5 लिंक से इकाइयों के लिए कर सकते हैं।

+0

आईएम 4 पर Im। ठीक है तो मैं त्रुटि को समझता हूं, लेकिन आपके द्वारा प्रदान किए गए लिंक में प्रस्तावित समाधान नहीं। कोई और सलाह/उदाहरण? – RPM1984

0

आपको स्थान आईडी की एक सूची बनाने की आवश्यकता है खोजा जा सकता है।

var idsToSearch = "1,2,3,4,5...";  

तो फिर तुम निम्नलिखित तरीके से Contains उपयोग कर सकते हैं:

var x = db 
     .Users 
     .Where(u => idsToSearch.Contains(u.LocationId)); 
+0

मुझे नहीं लगता कि यह सही है। सबसे पहले, 'कंटेनर' केवल 'टी' या' IENumerable 'लेता है। दूसरा, यह केवल तभी मेल खाता है जहां किसी भी काउंटी में खोजी गई स्थान की स्थान आईडी होती है, जबकि मैं चाहता हूं कि किसी भी काउंटी में किसी भी खोजी गई स्थान काउंटी शामिल हों। जटिल, मुझे पता है। :) – RPM1984

+0

अपडेट ........ –

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