2011-01-12 10 views
11

यह आसान SQL क्वेरी LINQ से प्रयास करते समय काफी परेशान साबित हो रही है।'SELECT MIN (जोनमिन), MAX से ज़ोन (जोनमिन) LINQ से SQLQ के रूप में

मेरे पास कॉलम ZoneMin के साथ एक SQL तालिका Plant है।

मैं कॉलम में न्यूनतम और अधिकतम मान ढूंढना चाहता हूं।
T-SQL में इस सवाल का जवाब काफी सरल है:

SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant

क्या है एक LINQ क्वेरी है कि मुझे यह करने के लिए मिल सकता है (या कुछ इसी तरह) एसक्यूएल?

मैंने किसी भी भाग्य के साथ .ggregate() और .GroupBy() पर कई प्रयास किए हैं। मैंने कई SO प्रश्नों को भी देखा है जो समान दिखते हैं।

यह परिणामस्वरूप सरणी पर लागू विधियों के साथ आसानी से हासिल किया जा सकता है, लेकिन मुझे टी-एसक्यूएल में इतना आसान होने पर प्रत्येक एसक्यूएल पंक्ति से एक मूल्य परिवहन करने की आवश्यकता नहीं है।

उत्तर

14

अपनी मूल क्वेरी के समान प्रदर्शन प्राप्त करने के लिए, आपको समूहिंग (प्रभाव को कम करने के लिए निरंतर, उदाहरण के लिए 0) का उपयोग करना होगा, ताकि आप उसी क्वेरी में दो बार रिकॉर्ड के उसी सेट को देख सकें। तालिका नाम का उपयोग करने से प्रत्येक संदर्भ पर एक नई क्वेरी तैयार की जा सकती है। प्रयास करें निम्नलिखित:

(from plant in db.Plants 
group plant by 0 into plants 
select new { Min = plants.Min(p => p.ZoneMin), Max = plants.Max(p => p.ZoneMin) } 
).Single() 

यह निम्न क्वेरी का उत्पादन:

SELECT MIN(plants.ZoneMin), MAX(plants.ZoneMin) 
FROM (SELECT 0 AS Grp, ZoneMin FROM Plants) AS plants 
GROUP BY plants.Grp 

और बाद अनुकूलक यह साथ किया जाता है, यह कुछ बराबर बाहर थूक आपकी क्वेरी के लिए, कम से कम एसक्यूएल सर्वर प्रबंधन स्टूडियो के अनुसार ।

+0

अच्छी तरह से किया गया! धन्यवाद एलन। मैं "निरंतर समूह द्वारा" चाल को आजमाने की कोशिश करता हूं। – Peter

+2

@ पीटर: फिर आप मुझसे आगे हैं - मैंने आपके प्रश्न पर शोध करने से पहले इस चाल के बारे में भी नहीं सुना है। –

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