|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
[.Net 4.0 / Entity Framework]Query Dinamiche
Eccomi ancora a rompere
![]() ![]() Allora, il mio scenario è questo: Una semplice griglia che viene popolata dall'entità del caso. Vorrei applicare un filtro dinamico su questa griglia per es.: l'entità è formata da cognome, nome, data di nascita, altri dati anagrafici. Quello che vorrei realizzare è di farmi restituire uno o più records senza specificare su quale "colonna" sto cercando, ad esempio, inserisco un codice fiscale, oppure inserisco le iniziali del cognome. In questi due semplici casi, ciò che mi aspetto è di ottenere un solo record per il codice fiscale, e diversi records per una ricerca parziale sul cognome. Tutto questo senza dover ogni volta specificare: Codice:
var query = from persone in context.People select persone Where bla //ma... var query = from persone in context.People select persone where qualsiasiCampo Like filtro http://msdn.microsoft.com/it-it/library/bb399367.aspx dal quale ho già ottenuto moltissime informazioni. Grazie ![]() RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
per applicare un numero variabile di filtri devi passare dalla scrittura "a query" a quella "a funzioni" (non ricordo i nomi "ufficiali", ma spero che mi capisci)
noi usiamo qualcosa tipo: Codice:
public static IEnumerable<T> Search<T>(this IEnumerable<T> source, IEnumerable<SearchParameter> parameters, SearchContext context) where T : ISearchObject<T> { var items = source; if (items != null) { foreach (SearchParameter parameter in parameters) { items = items.Where(parameter.Evaluate); if (!items.Any()) break; } } return items; } Codice:
bool Evaluate(T arg) (se il capo sgama sto snippet postato qui mi fa il culo ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
E' quindi lo stesso identico principio dei predicati ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
In questo contesto, è sbagliato usare la reflection ?
io ho 'firmato' in questo modo: Codice:
bool Match(TEntity entity) { if(entity.GetType().GetProperty(evaluatedPropertyName).GetValue(entity, null).ToString().Contains(someString)) return true; return false; } ?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Mamma mia, ci sono tanti strumenti a disposizione che mi sto perdendo
![]() allora: Codice:
var results = myContext.myObject.ToList().FindAll(o => o.Proprietà.Contains("abc"));
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
combinando insieme le cose:
Codice:
public class ViewContext<TEntity> { public static bool Match(string dataPropertyName, string filter, TEntity entity) { if(typeof(TEntity).GetProperty(dataPropertyName).GetValue(entity, null).ToString().Contains(filter)) return true; return false; } //// var results = context.MyObject.ToList().FindAll(obj => ViewContext<MyOBject>.Match(runtimeString, runtimeFilter, obj)); whatEverBindingOrDataSource.DataSource = results; ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:36.