Potrzebowałem zbudować filtr dynamiczny i chciałem dalej używać encji. Z tego powodu chciałem użyć PredicateBuilder z albahari.C# PredicateBuilder Entities: Parametr "f" nie był powiązany w określonym wyrażeniu zapytania LINQ do Entity
stworzyłem następujący kod:
var invoerDatums = PredicateBuilder.True<OnderzoeksVragen>();
var inner = PredicateBuilder.False<OnderzoeksVragen>();
foreach (var filter in set.RapportInvoerFilter.ToList())
{
if(filter.IsDate)
{
var date = DateTime.Parse(filter.Waarde);
invoerDatums = invoerDatums.Or(o => o.Van >= date && o.Tot <= date);
}
else
{
string temp = filter.Waarde;
inner = inner.Or(o => o.OnderzoekType == temp);
}
}
invoerDatums = invoerDatums.And(inner);
var onderzoeksVragen = entities.OnderzoeksVragen
.AsExpandable()
.Where(invoerDatums)
.ToList();
Kiedy wpadłem kod był tylko 1 filtr, który nie był filtr data. Tak więc wypełniono tylko wewnętrzny predykat. Po wykonaniu predykatu otrzymałem następujący błąd.
Parametr „F” nie jest ograniczone w określonym LINQ do podmiotów zapytania ekspresji.
Podczas wyszukiwania odpowiedzi znalazłem następujące page. Ale to już jest zaimplementowane w LINQKit.
Czy ktoś jeszcze doświadczył tego błędu i wiedział, jak go rozwiązać?
Musiałem również usunąć wywołanie AsExpandable() z mojego oryginalnego obiektu IQueryable. –
Dobra odpowiedź, ale wprowadzająca w błąd. Odpowiedź BloodBaza jest prostszą, bardziej poprawną odpowiedzią – Mick