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. Как да изпратите извлечено изображение от Mongo с помощта на GridFS в Spring Rest Call?

  2. Как да маршалирам json низ към bson документ за запис в MongoDB?

  3. Как да извърша намиране с помощта на $geoIntersects / 2dsphere в подполе на масив?

  4. Заявка за получаване на стойност чрез изваждане на стойност от текущия и следващия документ

  5. MongoDB:как да анализирам дата във версия 3.6 mongoDb?