LINQ)

2013-01-23 22 views
8

मैं LINQ करने वाली संस्थाओं निम्नलिखित प्रश्न हैंLINQ)

from r in ctx.Rs 
join p in ctx.Ps on r.RK equals p.RK 
group r by r.QK into gr 
select new { QK = (int)gr.Key, Num = gr.Count() } 

कि इस स्कीमा

Table P Table R Table Q 
PK* 
RK ----> RK* 
Text  QK ------> QK* 
      Text  Text 

के खिलाफ चलाता है और यह संदेश देता है कि क्या कोई रिकॉर्ड नहीं है क्यू में पी में कोई भी प्रासंगिक रिकॉर्ड नहीं है: "मूल्य प्रकार का मूल्य 'Int32' विफल हुआ क्योंकि भौतिक मूल्य शून्य है। या तो परिणाम प्रकार का सामान्य पैरामीटर या क्वेरी को एक निरर्थक प्रकार का उपयोग करना चाहिए।"

समस्या अंतिम पंक्ति में gr.Count() है, लेकिन मुझे कोई समाधान नहीं मिल रहा है। मैंने शून्य के लिए जीआर का परीक्षण करने की कोशिश की है, लेकिन काम करने का कोई तरीका नहीं मिल रहा है।

मैंने गणना() के बजाय Sum() का उपयोग करके इसी तरह की समस्या के कई समाधान देखे हैं, लेकिन मैं उन्हें अपनी समस्या में अनुकूलित करने में सक्षम नहीं हूं।

मैंने Group and Count in Linq issue में एक जैसा दिखने के लिए अपनी क्वेरी बदलने की कोशिश की, लेकिन मुझे बस एक अलग संदेश मिला।

मैंने Group and Count in Entity Framework (और कई अन्य) को भी देखा लेकिन समस्या अलग है।

उत्तर

4

मुझे आपके प्रारूप को पढ़ने में परेशानी हो रही है। लेकिन तुम कोशिश कर सकते हैं:

from r in ctx.Rs 
join p in ctx.Ps.DefaultIfEmpty() on r.RK equals p.RK 
group r by r.QK into gr 
select new { QK = (int)gr.Key, Num = gr.Count(x => x.RK != null) } 

DefaultIfEmpty के साथ और x => x.RK != null परिवर्तन किया जा रहा है।

+0

उत्तर देने के लिए धन्यवाद। दुर्भाग्यवश, यह अभी भी वही संदेश देता है। –

13

समूह कुंजी अशक्त

var results = ctx.Rs.Where(r => r.QK != null) 
    .GroupBy(r => r.QK) 
    .Select(gr => new { Key = (int)gr.Key, Count = gr.Count() } 
    .ToList(); 

पुनश्च नहीं हो सकता।

  1. अधिकतर, आपको इकाई फ्रेमवर्क में 'जॉइन' वाक्यविन्यास की आवश्यकता नहीं है। देखें: Loading Related Entities

  2. लेखन वर्णनात्मक अर्थपूर्ण चर नाम आपके कोड में काफी सुधार करेंगे और इसे समझ में लाएंगे। वास्तविक दुनिया के उत्पादन में पठनीयता महत्वपूर्ण है।

+0

अच्छा, वास्तव में यह सही से कम है। यह ठीक चलता है, लेकिन गलत जवाब देता है क्योंकि इसमें पी शामिल नहीं है जो पी में नहीं हैं। जब मैं इसे शामिल करने के साथ ठीक करने का प्रयास करता हूं, तो मुझे वही संदेश मिलता है। क्या पी में नहीं होने वाले रुपये को बाहर करने का कोई और तरीका है? कोई अन्य सुझाव? –

+0

मुझे काम करने का आपका समाधान मिला और सही परिणाम लौटा। कुंजी आपके समाधान की पहली पंक्ति में '.Where (r => r.QK! = Null)' है। एक बार फिर धन्यवाद। –