2011-02-15 16 views
47

का उपयोग करके शामिल हों ऐसा लगता है कि linq का उपयोग करके जुड़ने के विभिन्न तरीके हैं। एक और सीधा है और इस तरह बस में शामिल होने टेबल शामिल है:Entityframework जुड़ने की विधि और lambdas

var found = from c in s.categories 
      join cm in s.categorymaps on c.CategoryId equals cm.ChildCategoryId 
      select c; 

lambdas का उपयोग कर एक और तरीका नहीं है और मैं एक बार इस सिंटैक्स का उपयोग शामिल होने के लिए कैसे पता लगाने की कोशिश की एक बिल्ली हो रही है। क्या कोई विस्तृत स्पष्टीकरण और कई उदाहरणों के लिंक प्रदान कर सकता है? या बस उदाहरणों का उपयोग करके दिखाएं कि इस भ्रमित वाक्यविन्यास का उपयोग कैसे करें?

var x = _session.All<category>().Join<categorymap,category, .... 

उत्तर

11

आप कुछ उदाहरण here पा सकते हैं:

// Fill the DataSet. 
DataSet ds = new DataSet(); 
ds.Locale = CultureInfo.InvariantCulture; 
FillDataSet(ds); 

DataTable contacts = ds.Tables["Contact"]; 
DataTable orders = ds.Tables["SalesOrderHeader"]; 

var query = 
    contacts.AsEnumerable().Join(orders.AsEnumerable(), 
    order => order.Field<Int32>("ContactID"), 
    contact => contact.Field<Int32>("ContactID"), 
    (contact, order) => new 
    { 
     ContactID = contact.Field<Int32>("ContactID"), 
     SalesOrderID = order.Field<Int32>("SalesOrderID"), 
     FirstName = contact.Field<string>("FirstName"), 
     Lastname = contact.Field<string>("Lastname"), 
     TotalDue = order.Field<decimal>("TotalDue") 
    }); 


foreach (var contact_order in query) 
{ 
    Console.WriteLine("ContactID: {0} " 
        + "SalesOrderID: {1} " 
        + "FirstName: {2} " 
        + "Lastname: {3} " 
        + "TotalDue: {4}", 
     contact_order.ContactID, 
     contact_order.SalesOrderID, 
     contact_order.FirstName, 
     contact_order.Lastname, 
     contact_order.TotalDue); 
} 

या सिर्फ 'LINQ विधि वाक्य रचना में शामिल होने' के लिए गूगल।

+0

आपकी मदद के लिए सभी को धन्यवाद। मुझे यह बहुत ही उपयोगी लिंक मिला जो वास्तव में जटिल जुड़ाव() विधि बताता है, इसलिए मैंने सोचा कि मैं इसे दूसरों के लिए – Mason

+2

@Mason सीखने के लिए साझा करूंगा - यदि आपको यह उपयोगी लगता है तो कृपया मेरे उत्तर को ऊपर उठाएं –

124

आम तौर पर मैं LINQ के साथ लैम्ब्डा वाक्यविन्यास पसंद करता हूं, लेकिन Join एक उदाहरण है जहां मैं क्वेरी सिंटैक्स पसंद करता हूं - पूरी तरह से पठनीयता के लिए।

बहरहाल, यहाँ (मुझे लगता है कि, untested) अपने ऊपर क्वेरी के बराबर है:

var query = db.Categories   // source 
    .Join(db.CategoryMaps,   // target 
     c => c.CategoryId,   // FK 
     cm => cm.ChildCategoryId, // PK 
     (c, cm) => new { Category = c, CategoryMaps = cm }) // project result 
    .Select(x => x.Category); // select result 

आप प्रक्षेपण तुम क्या वापस करना चाहते हैं पर निर्भर करता साथ बेला के लिए हो सकता है, लेकिन वह यह की jist है ।

+0

मुझे अब तक का सबसे अच्छा स्पष्टीकरण दिया गया था, मैं था मेरे शामिल मुद्दों को हल करने में सक्षम, धन्यवाद – Manny

+1

एमएस में कौन बैठा था और फैसला किया कि यह वाक्यविन्यास सचेत है? मैं उससे मिलना चाहता हूं और उसे एक प्रश्न या दो – DanteTheSmith

+0

इस तरह के कोड के डाउनसाइड्स में से एक है जो बेनामी क्लास है जो आप शामिल हो जाते हैं, जिसके बाद परिणामों को चारों ओर गुजरना मुश्किल होता है, उदाहरण के लिए एक व्यू, कंट्रोलर, या इवेंट फ्रेमवर्क । मैं स्पष्ट इंटरमीडिएरी कक्षाएं लिखना चाहता हूं, जिसमें वास्तव में उन संपत्तियों के मिश्रण के साथ शामिल हैं जिन्हें मैं शामिल करता हूं। नतीजा यह है कि मुझे मजबूत टाइपिंग मिलती है, और बेहतर एसक्यूएल प्रदर्शन क्योंकि कॉलम की सूची पूरी पंक्तियों से अधिक बाध्य होती है। –

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