Używam EF 3.5 z MVC.
Chcę utworzyć stronę wyszukiwania, ma kilka pól dla kryteriów takich jak data, int itp.
Jaki jest sposób w linq do jednostek, aby dynamicznie filtrować wynik.
Jeśli istnieje jeden parametr, możemy go użyć .where (a => a.id == 1)
ale wiele kombinacji z opcjonalnym parametrem, jak mogę załadować wyniki, a następnie przekazać do modelu.
Odpowiedzi:
0 dla odpowiedzi № 1EF 3.5? Tak czy inaczej...
Możesz dodać kryteria wyszukiwania do ObjectQuery, ObjectSet lub IQueryable i połączyć je w oparciu o kryteria wyszukiwania, które są przydatne.
public SearchMyThings( string a, string b, int c )
{
var mywidgets = ObjectContext.CreateObjectSet<Widget>();
//or the EF 1.0 version CreateSet?
if( !a.IsNullOrEmpty )
mywidgets = mywidgets.Where( w => w.AProperty == a );
if( !b.IsNullOrEmpty )
mywidgets = mywidgets.Where( w => w.BProperty == b );
if( c > 0 )
mywidgets = mywidgets.Where( c => c.CProperty == c );
}
Jeśli potrzebujesz podejścia opartego na łańcuchach, zawsze możesz użyć przeciążenia ObjectQuery.Where ("esql"), aby dynamicznie konstruować niektóre eql i przekazywać je dalej.
Jeśli potrzebujesz większej kontroli nad ciągami i nie obawiasz się złożoności, którą możesz dać Dynamiczny Linq próba.