2012-01-16 18 views
5

मुझे लिंक से एंटिटीज में एक क्वेरी के साथ कुछ परेशानी हो रही है, जो मुझे उम्मीद है कि कोई इस पर प्रकाश डाल सकता है :-) मैं जो करने की कोशिश कर रहा हूं वह एक प्रश्न बनाने के लिए है तीन टेबलLINQ से Entities तीन तालिका क्वेरी में शामिल हों

अभी तक यह काम करता है, लेकिन आखिरी तालिका में शामिल होने के बाद मैं खाली हूं, क्वेरी के परिणाम में कोई रिकॉर्ड नहीं है। जब मैं आखिरी जुड़ाव हटा देता हूं, तो यह मुझे सही परिणाम देता है।

मेरे क्वेरी इस तरह दिखता है:

var query = from p in db.QuizParticipants 
      join points in db.ParticipantPoints on p.id 
      equals points.participantId into participantsGroup 
      from po in participantsGroup 
      join winners in db.Winners on p.id 
      equals winners.participantId into winnersGroup 
      from w in winnersGroup 
      where p.hasAttended == 1 && p.weeknumber == weeknumber 
      select new 
      { 
       ParticipantId = p.id, 
       HasAttended = p.hasAttended, 
       Weeknumber = p.weeknumber, 
       UmbracoMemberId = p.umbMemberId, 
       Points = po.points, 
       HasWonFirstPrize = w.hasWonFirstPrize, 
       HasWonVoucher = w.hasWonVoucher          
      }; 

मैं चाहते हैं क्या भले ही विजेता तालिका खाली है या उसमें कोई मुकाबला नहीं है कुछ रिकॉर्ड प्राप्त करने के लिए है।

इस पर किसी भी मदद/संकेत की सराहना की जाती है! :-)

बहुत पहले से धन्यवाद।

/बो

उत्तर

5

को from w in winnersGroup बदलने की जरूरत है विश्वास है, मुझे लगता है कि यह होगा ऐसा करने के लिए आसान हो जो आप करने की कोशिश कर रहे हैं।

var query = from p in db.QuizParticipants 
      where p.hasAttended == 1 && p.weeknumber == weeknumber 
      select new 
      { 
       ParticipantId = p.id, 
       HasAttended = p.hasAttended, 
       Weeknumber = p.weeknumber, 
       UmbracoMemberId = p.umbMemberId, 
       Points = p.ParticipantPoints.Sum(pts => pts.points), 
       HasWonFirstPrize = p.Winners.Any(w => w.hasWonFirstPrize), 
       HasWonVoucher = p.Winners.Any(w => w.hasWonVoucher) 
      }; 

यह मानते हुए है hasWonFirstPrize और hasWonVoucher बूलियन क्षेत्र हैं, लेकिन आप किसी भी एकीकृत फ़ंक्शन का उपयोग इस तरह के p.Winners.Any(w => w.hasWonFirstPrize == 1) के रूप में परिणाम की जरूरत है, प्राप्त करने के लिए कर सकते हैं

+0

जोएल, यह बहुत ही बढ़िया और साफ है! और यह काम करता है :-) बहुत बहुत धन्यवाद। अब कड़ी मेहनत पर: आपके उत्तर और कैडरेल दोनों ने वास्तव में मेरी मदद की, तो किसने स्वीकार किए जाने के रूप में चिह्नित करने का उत्तर दिया? स्टैक ओवरफ्लो पर नीति क्या है? – bomortensen

+0

अगर मैं पूछताछकर्ता था, तो मैं दोनों को अपवित्र कर दूंगा और जो कुछ भी मैं समाप्त कर रहा हूं उसे स्वीकार करूँगा। – cadrell0

4

मैं क्वेरी का उपयोग नहीं करते एक बहुत वाक्यविन्यास लेकिन मैं आपको तुम क्या कर मिलती है के बजाय इन के रूप में संबंधित संस्थाओं को सेट करते हैं from w in winnersGroup.DefaultIfEmpty()

+0

हाय cadrell0, मैं मानता हूँ :) मैं इसे करने की कोशिश की है, लेकिन यह मुझे यह त्रुटि देता है: मूल्य प्रकार 'बाइट' कास्ट विफल हुआ क्योंकि भौतिक मूल्य शून्य है। या तो परिणाम प्रकार का सामान्य पैरामीटर या क्वेरी को एक शून्य प्रकार का उपयोग करना चाहिए। HasWonFirstPrize और HasWonVoucher वास्तव में बाइट डेटाटाइप है, लेकिन मैं नहीं चाहता कि वे ईमानदार होने के लिए डेटाबेस में शून्य हो जाएं :-)? – bomortensen

+0

आपको शायद हैसवॉर्न फर्स्टप्रिज़ के असाइनमेंट को 'हैसवॉर्फ़स्ट्रिज = डब्ल्यू == नल' जैसे कुछ बदलने की आवश्यकता होगी? 0: w.hasWonFirstPrize, ' – cadrell0

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