sto costruendo predicati con classe PrediateBuilder di LinqKit a dinamicamente filtri di configurazione e voglio combinare uno nidificato all'altro.Nesting PredicateBuilder predicati: f 'Il parametro '' non era legato in LINQ specificato to Entities interrogare espressione'
Ho letto questo (http://www.albahari.com/nutshell/predicatebuilder.aspx):
Ecco il mio codice:
// The main predicate.
var mainPredicate = PredicateBuilder.True<Document>();
// ... some other conditions to the main predicate here ...
// The inner predicate (combined conditions using OR).
var innerPredicate = PredicateBuilder.False<Document>();
foreach (var period in periods)
{
var p = period;
innerPredicate =
innerPredicate.Or(
d =>
(d.Date >= p.DateFrom && d.Date <= p.DateTo));
}
mainPredicate = mainPredicate.And(innerPredicate);
documents = this.ObjectSet.AsExpandable().Where(mainPredicate).ToList();
sto combinando i miei due predicati proprio come è spiegato nella documentazione. Tuttavia, ottengo questa eccezione:
Il parametro 'f' non era vincolato nel LINQ specificato entità espressione interrogazione
ho pensato che il predicato interno deve essere ampliato prima di mescolarla con il predicato principale, così ho cambiato il mio codice si combinano per aggiungere una chiamata al metodo del predicato interna Expand
come questo:
mainPredicate = mainPredicate.And(innerPredicate.Expand());
Ma ho la ex fa la stessa eccezione.
L'unica differenza nel mio codice contro la documentazione è che io dinamicamente costruire il mio predicato nidificato utilizzando un ciclo foreach
. Semplicemente non so come possa influenzare negativamente l'espressione risultante.
Cosa c'è di sbagliato nel mio codice?
Come posso eseguire il debug di questo?
Da dove proviene il parametro f? Come viene generato? Perché è problematico nel mio caso?
C'è qualche tipo di visualizzatore di espressioni di qualche tipo che potrebbe aiutarmi a vedere effettivamente cosa c'è di sbagliato nell'espressione risultante? Perché il corpo dell'espressione è difficile da leggere.
Guardando [questa domanda] (http://stackoverflow.com/questions/2947820/c-sharp-predicatebuilder-entities-the-parameter-f-was-not-bound-in-the-specif) appare potrebbe essere necessario usare 'Expand()' all'interno di 'Or' di' innerPredicate' pure – jszigeti
. Ho provato. Ho la stessa eccezione. –