[c#] LINQ से SQL में आंतरिक शामिल होने के लिए वाक्यविन्यास क्या है?



Answers

और क्योंकि मैं अभिव्यक्ति श्रृंखला वाक्यविन्यास पसंद करता हूं, यहां यह है कि आप इसे कैसे करते हैं:

var dealerContracts = DealerContact.Join(Dealer, 
                                 contact => contact.DealerId,
                                 dealer => dealer.DealerId,
                                 (contact, dealer) => contact);
Question

मैं एक LINQ से SQL कथन लिख रहा हूं, और मैं सी # में एक ON क्लॉज के साथ सामान्य आंतरिक जुड़ने के लिए मानक वाक्यविन्यास के बाद हूं।

LINQ से SQL में निम्न का प्रतिनिधित्व कैसे करते हैं:

select DealerContact.*
from Dealer 
inner join DealerContact on Dealer.DealerID = DealerContact.DealerID



एक सर्वश्रेष्ठ उदाहरण

तालिका नाम: TBL_Emp और TBL_Dep

var result = from emp in TBL_Emp join dep in TBL_Dep on emp.id=dep.id
select new
{
 emp.Name;
 emp.Address
 dep.Department_Name
}


foreach(char item in result)
 { // to do}



दरअसल, अक्सर लिनक में शामिल होना बेहतर होता है। जब नेविगेशन गुण होते हैं तो आपके linq कथन लिखने का एक बहुत ही संक्षिप्त तरीका है:

from dealer in db.Dealers
from contact in dealer.DealerContacts
select new { whatever you need from dealer or contact }

यह एक खंड में अनुवाद करता है:

SELECT <columns>
FROM Dealer, DealerContact
WHERE Dealer.DealerID = DealerContact.DealerID



इसे इस्तेमाल करे :

     var data =(from t1 in dataContext.Table1 join 
                 t2 in dataContext.Table2 on 
                 t1.field equals t2.field 
                 orderby t1.Id select t1).ToList(); 



मूल रूप से LINQ जॉइन ऑपरेटर एसक्यूएल के लिए कोई लाभ नहीं प्रदान करता है। मैं निम्नलिखित प्रश्न पूछता हूं

var r = from dealer in db.Dealers
   from contact in db.DealerContact
   where dealer.DealerID == contact.DealerID
   select dealerContact;

एसक्यूएल में INNER जॉइन में परिणाम होगा

शामिल होना IENumerable <> के लिए उपयोगी है क्योंकि यह अधिक कुशल है:

from contact in db.DealerContact  

प्रत्येक डीलर के लिए खंड फिर से निष्पादित किया जाएगा लेकिन IQueryable <> यह मामला नहीं है। इसमें भी कम लचीला शामिल है।




चालाक मानव द्वारा अभिव्यक्ति श्रृंखला वाक्यविन्यास answer विस्तार करने के लिए:

यदि आप दोनों टेबलों के खेतों पर एक साथ जुड़ने के लिए चीजों (फ़िल्टर या चयन की तरह) करना चाहते थे - बजाय उन दो तालिकाओं में से केवल एक पर - आप जुड़ने के तरीके के अंतिम पैरामीटर की लैम्ब्डा अभिव्यक्ति में एक नई वस्तु बना सकते हैं उन दोनों तालिकाओं को शामिल करना, उदाहरण के लिए:

var dealerInfo = DealerContact.Join(Dealer, 
                              dc => dc.DealerId,
                              d => d.DealerId,
                              (dc, d) => new { DealerContact = dc, Dealer = d })
                          .Where(dc_d => dc_d.Dealer.FirstName == "Glenn" 
                              && dc_d.DealerContact.City == "Chicago")
                          .Select(dc_d => new {
                              dc_d.Dealer.DealerID,
                              dc_d.Dealer.FirstName,
                              dc_d.Dealer.LastName,
                              dc_d.DealerContact.City,
                              dc_d.DealerContact.State });

रोचक हिस्सा उस उदाहरण के लाइन 4 में लैम्ब्डा अभिव्यक्ति है:

(dc, d) => new { DealerContact = dc, Dealer = d }

... जहां हम एक नई अनाम-प्रकार ऑब्जेक्ट का निर्माण करते हैं, जिसमें उनके सभी फ़ील्ड के साथ डीलर कॉन्टैक्ट और डीलर रिकॉर्ड गुण होते हैं।

हम तब उन रिकॉर्ड्स से फ़ील्ड्स का उपयोग कर सकते हैं जैसे हम फ़िल्टर करते हैं और परिणामों का चयन करते हैं, जैसा कि उदाहरण के शेष द्वारा प्रदर्शित किया गया है, जो हमारे द्वारा निर्मित अज्ञात ऑब्जेक्ट के नाम के रूप में dc_d का उपयोग करता है जिसमें डीलर कॉन्टैक्ट और डीलर रिकॉर्ड दोनों गुण होते हैं।




var list = (from u in db.Users join c in db.Customers on u.CustomerId equals c.CustomerId where u.Username == username
   select new {u.UserId, u.CustomerId, u.ClientId, u.RoleId, u.Username, u.Email, u.Password, u.Salt, u.Hint1, u.Hint2, u.Hint3, u.Locked, u.Active,c.ProfilePic}).First();

अपने इच्छित टेबल नाम लिखें, और फ़ील्ड के परिणाम प्राप्त करने के लिए चयन शुरू करें।




var Data= (from dealer in Dealer join dealercontact in DealerContact on dealer.ID equals dealercontact.DealerID
select new{
dealer.Id,
dealercontact.ContactName

}).ToList();



इसके बजाय कोशिश करें,

var dealer = from d in Dealer
             join dc in DealerContact on d.DealerID equals dc.DealerID
             select d;



Related