I często trzeba ograniczyć wybiera polami jak publishStart
, publishEnd
, active
metodę rozszerzenia LINQ
mam tych pól w różnych tabelach. Więc tylko wiersze powinny być zaznaczone, że są
a: active == true;
b: publishStart < now;
c: publishEnd > now;
tak, na przykład:
db.myTable.SingleOrDefault(a => (a.ID == _theID
//now the active and start-end part:
&& ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
&& ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
&& a.active == true));
To jest trochę długi, więc zastanawiam się, czy jest możliwe, aby stworzyć - metody (rozszerzenie?) jak:
db.myTable.SingleOrDefault(a => (a.ID == _theID).isActive()
gdzie isActive()
zapewnia 3 linie powyższym fragmencie.
Jak mogę to zrobić? Czy istnieje lepszy sposób na wyczyszczenie kodu?
Wszystkie są w osobnych tabelach, prawda? Nie jedna tabela, która jest odsłonięta przez kontekst? Pytam, ponieważ w preambule wskazano, że właściwości znajdują się na oddzielnych tabelach, podczas gdy w filtrze używa się tylko jednego kontekstu. Jeśli wszystkie są na tym samym stole, łatwo, jeśli są na różnych stołach, bardzo dobrze zmieniają właściwą odpowiedź. – casperOne
W takim przypadku musisz wywołać 'IsActive' ** przed **' SingleOrDefault', aby mógł filtrować aktywne elementy przed zrobieniem tylko jednego, chyba że jest tylko jeden element z tym ID. – Servy