मेरे पास SQL क्वेरी के लिए एक बहुत जटिल लिंक है जो एक Microsoft SQL सर्वर डेटाबेस से परिणाम सेट देता है। क्वेरी के समान वाक्य रचना का उपयोग कर बनाया जाता है:लिंक क्वेरी रिटर्न गलत परिणाम सेट करें
Dim db as MyDataContext = MyGetDataContextHelper()
Dim qry = From rslt in db.MyView Select ColumnList
If userParam1 IsNot Nothing Then
qry = qry.Where(lambda for the filter)
End If
etc....
Return qry.ToList()
वहाँ प्रश्न के कई उपयोगकर्ता द्वारा निर्दिष्ट फिल्टर कर रहे हैं, एक है कि एक भौगोलिक त्रिज्या खोज करता है भी शामिल है।
यहां समस्या है। मेरे पास अंत में "ToList" कॉल पर एक ब्रेक सेट है। जब ब्रेक मारा जाता है तो मैं जेनरेट किए गए SQL कथन को देखने के लिए लिंक से SQL डीबग विजुअलाइज़र का उपयोग करता हूं। मैं उस जटिल SQL कथन को एक SQL सर्वर प्रबंधन स्टूडियो क्वेरी विंडो में कॉपी करता हूं और मुझे अपने इच्छित डेटाबेस को ठीक करने के लिए इसे अपने डेटाबेस के विरुद्ध निष्पादित करता हूं। तो जेनरेट एसक्यूएल वांछित परिणाम उत्पन्न करने के लिए प्रतीत होता है। हालांकि, जब मैं क्वेरी ऑब्जेक्ट की "ToList" विधि निष्पादित करता हूं तो लौटाई गई सूची में कम पंक्तियां और कुछ अलग पंक्तियां होती हैं। मैंने डेटाकॉन्टेक्स्ट लॉग प्रॉपर्टी को एक ही फाइल के साथ फ़ाइल में लिखने का भी प्रयास किया है। क्वेरी SQL प्रबंधन स्टूडियो में सही परिणाम सेट उत्पन्न करती है, लेकिन ToList विधि से गलत परिणाम।
यह कैसे हो सकता है? यदि जेनरेट किया गया एसक्यूएल बस SQL सर्वर से कनेक्शन पर पारित किया गया है, तो क्या यह SQL सर्वर प्रबंधन स्टूडियो में वास्तव में परिणाम सेट उत्पन्न नहीं करेगा? मुझे लगता है कि मैं लिंक से एसक्यूएल तंत्र के बारे में कुछ गलत समझ रहा हूं, यानी कि यह सिर्फ SQL सर्वर के लिए एक पासथ्रू नहीं है। क्या वो सही है?
संपादित करें: नीचे कोई अनुरोध के अनुसार, यहां एसक्यूएल कि Linq से उत्पन्न होता है, संक्षिप्तता के लिए निकाले गए परिणाम स्तंभों से अधिकांश के साथ का एक बहुत संक्षिप्त संस्करण है। यह एसक्यूएल प्रबंधन स्टूडियो में सही परिणाम उत्पन्न करता है, लेकिन परिणाम मेरे आवेदन में वापस आ गया है।
SELECT [t3].[Id]
FROM (
SELECT DISTINCT [t1].[Id]
FROM (
SELECT [t0].[Id], [t0].[ItemDate]
FROM [dbo].[MySearchView] AS [t0]
) AS [t1]
WHERE (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[ZipCoverage] AS [t2]
WHERE ([t2].[Id] = [t1].[Id])
AND ([t2].[Latitude] >= (41.09046 - (0.5)))
AND ([t2].[Latitude] <= (41.09046 + (0.5)))
AND ([t2].[Longitude] >= (-73.43106 - (0.5)))
AND ([t2].[Longitude] <= (-73.43106 + (0.5)))
AND (ABS(3956.08833132861 * 2 * ATN2(SQRT(POWER(SIN((((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Latitude]) - 0.717163818159029)/(CONVERT(Float,2))), 2) + (COS(0.717163818159029) * COS((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Latitude]) * POWER(SIN((((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Longitude]) - -1.28161377022951)/(CONVERT(Float,2))), 2))), SQRT((1 - POWER(SIN((((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Latitude]) - 0.717163818159029)/(CONVERT(Float,2))), 2)) + (COS(0.717163818159029) * COS((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Latitude]) * POWER(SIN(((CONVERT(Float,CONVERT(Float,0.0174532925199433))) * [t2].[Longitude])/(CONVERT(Float,2))), 2))))) <= 5)))
AND ([t1].[ItemDate] <= '11/17/2009 8:12:42 PM')
) AS [t3]
अद्यतन 2009-11-17 इस मामले से संबंधित एमएस संपर्क करने में सक्षम था। एक नमूना आवेदन बनाया जो मैंने उनके समर्थन प्रतिनिधि को प्रस्तुत किया था। उन्होंने इस मुद्दे को दोहराया है और शोध कर रहे हैं। जब मुझे प्रतिक्रिया मिलती है तो उत्तर पोस्ट करेंगे।
अद्यतन 2009-12-21 अंततः माइक्रोसॉफ्ट से मदद के साथ सही उत्तर पर पहुंचे। स्पष्टीकरण के लिए कृपया नीचे अपना स्वीकृत उत्तर देखें।
क्या आप अपनी वास्तविक LINQ क्वेरी पोस्ट कर सकते हैं? आपने कहा कि यह बहुत जटिल था। यह देखते हुए कि बाकी सब कुछ क्रम में प्रतीत होता है, शेष विकल्प यह है कि आपकी LINQ क्वेरी में रनटाइम-केवल प्रोसेसिंग होती है जो अनुवादक एसक्यूएल में नहीं जा सका। – jrista
मैंने नीचे दिए गए मेरे उत्तर पर आपकी टिप्पणी का जवाब दिया। –
क्या कोई ऑर्डर नहीं है? हम कितने पंक्तियों के बारे में बात कर रहे हैं, और आप कैसे मान्य हैं कि परिणाम अलग हैं? क्या यह संभव है कि आदेश अलग है और इसे परिणाम की तरह दिखाना अलग है? –