MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

LINQ लैम्ब्डा अभिव्यक्ति में स्ट्रिंग चर का प्रयोग करें

(यह महसूस करने से पहले प्रदान किया गया मूल था कि प्रतिबिंब इस विशेष मामले में मदद नहीं करेगा। अद्यतन उत्तर के लिए नीचे संपादित देखें)

यदि आपको प्रतिबिंब का उपयोग करने में कोई आपत्ति नहीं है, तो आप यह कर सकते हैं:

var data = db.Single<Demo>(d => "value" == (string)typeof(Demo).GetProperty(propname).GetValue(d));

संपादित करें

जैसा कि अन्य लोगों ने टिप्पणियों में संकेत दिया है, MongoDB के साथ यह काम करने के लिए, आपको "हाथ से" अभिव्यक्ति का निर्माण करना होगा।

इसलिए, यदि मैं निम्नलिखित कथन लेता हूं:

var data = db.Single<Demo>(d => d.prop1 == "value");

मेरा मानना ​​है कि निम्नलिखित समकक्ष होना चाहिए, लेकिन लैम्ब्डा अभिव्यक्ति को हाथ से बनाना:

string propname = "prop1"; // you can now change this to any valid property name.

var parameterExpresion = Expression.Parameter(typeof(Demo), "d");
var binaryExpression = Expression.Equal(
    Expression.Property(parameterExpresion, propname),
    Expression.Constant("value"));
var lambda = Expression.Lambda<Func<Demo, bool>>(binaryExpression, parameterExpresion);

var data = db.Single<Demo>(lambda);

... सिवाय इसके कि अब, आपको propname . का मान बदलने में सक्षम होना चाहिए किसी भी वैध संपत्ति के नाम पर, और यह बस काम करना चाहिए।

यह देखते हुए कि लैम्ब्डा को मैन्युअल रूप से बनाते समय कोड को कैसे वर्बोज़ मिलता है, वास्तव में मुझे उन सभी कंपाइलर जादू की सराहना करने में मदद करता है जो हमारे द्वारा कभी भी ध्यान दिए बिना होता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. उत्पादन कोड में नेवला अनुक्रमण

  2. विंडोज़ पर बाहरी ड्राइव का उपयोग करने के लिए मैं डॉकर में चलाने के लिए मोंगो को कैसे कॉन्फ़िगर करूं?

  3. मोंगोडब एक्सेसिंग सबडॉक्यूमेंट्स

  4. आईडी को ऑब्जेक्ट आईडी में बदलने के लिए मोंगो के लिए स्प्रिंग डेटा रोकें

  5. Node.js MongoDB से कनेक्ट करने में विफल