द्वारा सरल आदेश के लिए उप क्वेरी उत्पन्न करना मुझे समझ में आ रहा है कि SQL आउटपुट में LINQ में लिखी गई एक साधारण क्वेरी के लिए उप-क्वेरी क्यों है। यह मेरा कोड है:LINQ
var list = db.User.Where(u => u.Name == somename).OrderBy(u => u.IdUser).ToList();
जहां SomeName एक पैरामीटर मैं निष्पादन समय पर गुजर कर रहा हूँ है।
उत्पादन एसक्यूएल है:
SELECT
Project1.IdUser,
Project1.Name
FROM (SELECT
Extent1.IdUser,
Extent1.Name
FROM user AS Extent1
WHERE Extent1.Name = 'John' /* @p__linq__0 */) AS Project1
ORDER BY
Project1.IdUser ASC
उत्पादन वास्तव में कुछ है कि सरल के लिए एक उप क्वेरी होने पर?
मैं भी
var list = db.User.Where(u => u.Name.Equals(somename)).OrderBy(u => u.IdUser).ToList();
जो उपर दिए गए उत्पादन उत्पन्न करने की कोशिश की।
मैं मुश्किल कोड पैरामीटर, जैसे हैं:
var list = db.User.Where(u => u.Name == "John").OrderBy(u => u.IdUser).ToList();
यह उम्मीद काम करता है के रूप में, केवल
SELECT
Extent1.IdUser,
Extent1.Name
FROM user AS Extent1
WHERE 'John' /* @gp1 */ = Extent1.Name
ORDER BY
Extent1.IdUser ASC
कुछ बातें मैं उपयोग कर रहा हूँ पैदा:
- EntityFramework 5 , .NET 4.5
- SQL सर्वर 2012
- झलक (जो MiniProfiler उपयोग करता है) एसक्यूएल को देखने के लिए उत्पन्न
मैं एक LINQ विशेषज्ञ नहीं हूँ, तो क्या मैं यहाँ याद आ रही है?
क्या दोनों के बीच क्वेरी योजना में कोई अंतर है? – Laurence
नहीं, वे एक ही निष्पादन योजना को हल करते हैं, लेकिन यह वाक्यविन्यास मुझे खराब करता है। कल्पना करें कि क्या मैं LINQ द्वारा उत्पन्न सभी जटिल अनावश्यक जटिलता के साथ एक और जटिल क्वेरी डीबग कर रहा हूं, यह उत्पादक नहीं होगा। –
एब्स्ट्रक्शन एक लागत के साथ आता है। यदि आपको लागत पसंद नहीं है, तो स्वयं को एसक्यूएल लिखें। इन विकल्पों में से कोई सही या गलत पक्ष नहीं है। – Laurence