2012-07-31 9 views
6

क्या एक 2 from खंड का उपयोग करके शामिल लेखन के बीच का अंतर और एक where इस तरह:LINQ करने वाली एसक्यूएल खंड से कई के साथ जुड़ जाता वाक्य रचना बनाम पारंपरिक वाक्य रचना में शामिल होने

var SomeQuery = from a in MyDC.Table1 
       from b in MyDC.Table2 
       where a.SomeCol1 == SomeParameter && a.SomeCol2 === b.SomeCol1 

और एक join लेखन का उपयोग करके शामिल ऑपरेटर।

यह एक join पर 2 टेबल के लिए है, लेकिन निश्चित रूप से, कभी कभी, हम भी अधिक तालिकाओं में शामिल होने की जरूरत है और हम where के साथ अन्य from खंड गठबंधन करने के लिए अगर हम वाक्य रचना के ऊपर चयन की जरूरत है।

मुझे पता है कि दोनों सिंटैक्स प्रश्न एक ही डेटा लौटाते हैं, लेकिन मैं सोच रहा था कि कोई प्रदर्शन अंतर है, या कोई अन्य प्रकार का अंतर है, जो कि दूसरे पर एक वाक्यविन्यास का अनुकूलन करेगा।

आपके सुझावों के लिए धन्यवाद।

उत्तर

9

इस प्रश्न का वास्तव में इन दोनों में बहुत अच्छा जवाब दिया गया है।

INNER JOIN ON vs WHERE clause

INNER JOIN vs multiple table names in "FROM"

मैं कैसे तीन अलग अलग LINQ भाव एसक्यूएल में अनुवाद किया जाएगा पर दो उदाहरण दिए हैं।

अंतर्निहित शामिल हो:

from prod in Articles 
from kat in MainGroups 
where kat.MainGroupNo == prod.MainGroupNo 
select new { kat.Name, prod.ArticleNo } 

SELECT [t1].[Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0], [dbo].[MainGroup] AS [t1] 
WHERE [t1].[MainGroupNo] = [t0].[MainGroupNo] 

इनर में अनुवाद किया जाएगा में शामिल होने:

from prod in Articles 
join kat in MainGroups on prod.MainGroupNo equals kat.MainGroupNo 
select new { kat.Name, prod.ArticleNo } 

में अनुवाद किया जाएगा
SELECT [t1].[Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0] 
INNER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] 

वाम बाहरी में शामिल होने:

from prod in Articles 
join g1 in MainGroups on prod.MainGroupNo equals g1.MainGroupNo into prodGroup 
from kat in prodGroup.DefaultIfEmpty() 
select new { kat.Name, prod.ArticleNo } 

SELECT [t1].[Name] AS [Name], [t0].[ArticleNo] 
FROM [dbo].[Article] AS [t0] 
LEFT OUTER JOIN [dbo].[MainGroup] AS [t1] ON [t0].[MainGroupNo] = [t1].[MainGroupNo] 

में अनुवाद किया जाएगा आप परीक्षण करने के लिए कैसे अपने भाव एसक्यूएल में अनुवाद किया जाएगा चाहते हैं, मैं सुझाव है कि आप LINQPad कोशिश । यह इस तरह की चीजों को समझने के लिए एक शानदार उपकरण है।

+0

तो बेहतर क्या है? क्लॉज से 2 या उससे अधिक या 2 या उससे अधिक क्लॉज में शामिल हों? – frenchie

+0

http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-लाइन शामिल होने के अनुसार बेहतर लगता है। –

-2
var result = from a in DB.classA 
from b in DB.classB 
where a.id.Equals(b.id) 
select new{a.b};