MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Gunakan variabel string dalam ekspresi lambda LINQ

(Ini adalah yang asli yang diberikan sebelum menyadari bahwa refleksi tidak akan membantu dalam kasus khusus ini. Lihat edit di bawah untuk jawaban yang diperbarui)

Jika Anda tidak keberatan menggunakan refleksi, Anda dapat melakukan:

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

EDIT

Seperti yang telah diisyaratkan orang lain di komentar, untuk membuat ini berfungsi dengan MongoDB, Anda harus membuat ekspresi "dengan tangan".

Jadi, jika saya mengambil pernyataan berikut:

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

Saya percaya bahwa yang berikut ini harus setara, tetapi membangun ekspresi lambda dengan tangan:

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);

... kecuali sekarang, Anda seharusnya dapat mengubah nilai propname ke nama properti apa pun yang valid, dan itu seharusnya berfungsi.

Melihat bagaimana kode bertele-tele saat membuat lambda secara manual sangat membantu saya menghargai semua keajaiban kompiler yang terjadi tanpa pernah kita sadari.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hindari hasil bidang nol saat menggunakan $dateFromString di bidang

  2. i18Next - NodeJS - Cara mengubah terjemahan tanpa memuat ulang server

  3. Basis data mana yang harus dipilih (Cassandra, MongoDB, ?) untuk menyimpan dan menanyakan data peristiwa / log / metrik?

  4. Node.js gagal terhubung ke MongoDB

  5. Cara menulis kueri pencarian mongo berikut di Yii2