ho spesso bisogno di limitare SELECT da campi come publishStart
, publishEnd
, active
metodo di estensione LINQ
Ho questi campi in diversi tavoli diversi. Quindi solo le righe devono essere selezionati, che sono
a: active == true;
b: publishStart < now;
c: publishEnd > now;
Così, ad esempio:
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));
Questo è un po 'lungo, quindi mi chiedo se è possibile creare un - metodo (estensione?) come:
db.myTable.SingleOrDefault(a => (a.ID == _theID).isActive()
dove il isActive()
fornisce le 3 linee di frammento di sopra.
Come posso fare questo? C'è un modo migliore per ripulire il codice?
Questi sono tutti in tabelle separate, giusto? Non una singola tabella esposta dal contesto? Chiedo perché nel preambolo si indica che le proprietà si trovano su tabelle separate, mentre si utilizza solo un contesto nel filtro. Se sono tutti sullo stesso tavolo, è facile, se sono su tavoli diversi, altera tremendamente la risposta giusta. – casperOne
In tal caso, devi chiamare 'IsActive' ** prima di **' SingleOrDefault' in modo che possa filtrare gli elementi attivi prima di prenderne uno solo, a meno che non ci sia un solo elemento con quell'ID. – Servy