Linq सिंटैक्स - कई कॉलम का चयन करना


96

यह मेरा Linq सिंटेक्स है जो मैं अपने इकाई मॉडल का उपयोग कर रहा हूं

IQueryable<string> objEmployee = null;

objEmployee = from res in _db.EMPLOYEEs
              where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
              select res.EMAIL;

मैं कई कॉलम कैसे चुन सकता हूं? जैसे मैं res.ID aswell का चयन करना चाहता हूं। और मैं उन्हें कैसे प्राप्त कर सकता हूं? IQueryable मेरे विचार से काम नहीं करेगा। और यह Linq को SQL कहा जाता है - सही है?


3
LinqToSql और एंटिटी फ्रेमवर्क अलग हैं। देखें stackoverflow.com/questions/8676/…
gideon

जवाबों:


189

जैसा कि अन्य उत्तरों ने संकेत दिया है, आपको एक अनाम प्रकार का उपयोग करने की आवश्यकता है।

जहाँ तक सिंटैक्स का सवाल है, मैं व्यक्तिगत रूप से विधि-निर्धारण को अधिक पसंद करता हूँ। समतुल्य विधि का पालन इस प्रकार होगा: -

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo)
    .Select(x => new { x.EMAIL, x.ID });

AFAIK, घोषणात्मक LINQ सिंटैक्स को संकलित करते समय इसी तरह की एक विधि कॉल श्रृंखला में परिवर्तित किया जाता है।

अपडेट करें

यदि आप संपूर्ण ऑब्जेक्ट चाहते हैं, तो आपको कॉल को बस Select()यानि कि पर छोड़ देना होगा

var employee = _db.EMPLOYEEs
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo);

72

आप उदाहरण के लिए अनाम प्रकारों का उपयोग कर सकते हैं:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };

क्या आप यह बता सकते हैं कि इस अभिव्यक्ति को ठीक से कैसे लिखा जाए: नया {(DateTime.Now - कर्ज। अस्वीकृति), ऋण चुनें। ? यह एक त्रुटि फेंकता है: अमान्य अनाम प्रकार के सदस्य
घोषणाकर्ता

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}। उत्तर में प्रयुक्त प्रपत्र एक शॉर्टहैंड है, जहां आरंभीकरण अभिव्यक्ति में सदस्य का नाम अनाम प्रकार के फ़ील्ड नाम के रूप में उपयोग किया जाता है। जैसे new {res.EMAIL, res.USER_NAME}एक आशुलिपि है new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}। यदि तारीख के साथ आपके मामले में कोई अभिव्यक्ति होती है, तो शॉर्टहैंड लागू नहीं होता है, इसलिए संकलक त्रुटि होती है।
इवान डैनिलोव

5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

या आप उपयोग कर सकते हैं

 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {email=res.EMAIL, username=res.USERNAME} );

स्पष्टीकरण:

  1. Res के रूप में db से कर्मचारी का चयन करें।

  2. कर्मचारी विवरण को उस स्थिति के अनुसार फ़िल्टर करें।

  3. नए {} का उपयोग करके एक अनाम ऑब्जेक्ट बनाकर कर्मचारी ऑब्जेक्ट से आवश्यक फ़ील्ड चुनें


उत्तर में स्पष्टीकरण जोड़ें।
संदीप

आप विभिन्न स्तंभों तक कैसे पहुँच सकते हैं?
ARIDder101
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.