2012-12-18 28 views
5

मैंने कुछ इकाई फ्रेमवर्क कोड पर नियंत्रण लिया है और मैं इसे पुनः प्रतिक्रिया देने के लिए देख रहा हूं। ऐसा करने से पहले, मैं देखना चाहता हूं कि मेरे विचार सही हैं और मुझे चीजों को करने का इकाई-ढांचा तरीका नहीं है।डाटा लेयर रीफैक्टरिंग

उदाहरण 1 - Subquery बनाम जुड़ें

यहाँ हम एक एक-से-कई के रूप में और बी एस के बीच। नीचे दिए गए कोड के अलावा पढ़ने के लिए मुश्किल है, क्या यह भी अक्षम है?

from a in dataContext.As 
where ((from b in dataContext.Bs 
     where b.Text.StartsWith(searchText) 
     select b.AId).Distinct()).Contains(a.Id) 
select a 

क्या यह बेहतर होगा, उदाहरण के लिए, इसमें शामिल होने और ऐसा कुछ करने के लिए बेहतर होगा? एक एक-से-कई के रूप में और बी एस और एक एक-से-कई बी एस और सी के बीच के बीच स्पष्ट शामिल नेविगेशन बनाम

यहाँ हम है -

from a in dataContext.As 
where a.Bs.Any(b => b.Text.StartsWith(searchText)) 
select a 

उदाहरण 2।

from a in dataContext.As 
join b in dataContext.Bs on b.AId equals a.Id 
join c in dataContext.Cs on c.BId equals b.Id 
where c.SomeValue equals searchValue 
select a 

क्या डेटा मॉडल के माध्यम से नेविगेट करने के बजाय स्पष्ट जुड़ने का कोई अच्छा कारण है? उदाहरण के लिए:

from a in dataContext.As 
where a.Bs.Any(b => b.Cs.Any(c => c.SomeValue == searchValue) 
select a 

उत्तर

0

कभी कभी यह में शामिल होने शैली और सबक्वेरी उपयोग करने के लिए एक LINQ 2 SQL क्वेरी के कुछ पहलुओं पर नियंत्रण पाने के लिए आवश्यक है। यहां ऐसा मामला नहीं है। "नेविगेशन" शैली कड़ाई से बेहतर है। कभी-कभी, यह प्रदर्शन लाभों के साथ भी आता है क्योंकि LINQ से SQL ने स्मार्ट SQL पैटर्न का उपयोग किया था।

मैं सिर्फ "आप सही हैं" के साथ जवाब नहीं देना चाहता हूं इसलिए मुझे कहना है कि मुझे LINQ से SQL के साथ बहुत अनुभव है। मैं इसे दो बड़ी परियोजनाओं पर उपयोग कर रहा हूं जहां प्रदर्शन महत्वपूर्ण है और लगभग हर जेनरेट किए गए SQL कथन मेरे द्वारा perf-test है। तो यह जवाब कुछ अधिकार रखता है और सिर्फ एक यादृच्छिक इंटरनेट राय नहीं है।

+0

उत्तर देने के लिए समय निकालने के लिए धन्यवाद। – Joey

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