MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Użyj zmiennej ciągu w wyrażeniu lambda LINQ

(To był oryginał dostarczony, zanim zdaliśmy sobie sprawę, że odbicie nie pomoże w tym konkretnym przypadku. Zobacz edycję poniżej, aby uzyskać zaktualizowaną odpowiedź)

Jeśli nie masz nic przeciwko używaniu refleksji, możesz zrobić:

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

EDYTUJ

Jak sugerowali inni w komentarzach, aby to zadziałało z MongoDB, musisz zbudować wyrażenie "ręcznie".

Tak więc, jeśli przyjmę następujące stwierdzenie:

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

Uważam, że poniższe powinno być równoważne, ale ręczne budowanie wyrażenia lambda:

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

... z wyjątkiem tego, że teraz powinieneś być w stanie zmienić wartość propname do dowolnej prawidłowej nazwy właściwości i powinno po prostu działać.

Patrzenie na to, jak gadatliwy jest kod podczas ręcznego budowania lambd, naprawdę pomaga mi docenić całą magię kompilatora, która dzieje się bez naszej wiedzy.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Najlepszy sposób na odpytywanie wszystkich dokumentów z kolekcji mongodb w sposób reaktywny bez zalewania pamięci RAM

  2. Błąd wyboru serwera Docker i mongo-go-driver

  3. Dokument podrzędny dotyczący wypełnienia mangusty

  4. mongodb $addToSet do pola bez tablicy podczas aktualizacji na upsert

  5. Jak mogę zwrócić element, którego szukam w zagnieżdżonej tablicy?