mam kod:Różnica między PredicateBuilder <True> i PredicateBuilder <False>?
var predicate = PredicateBuilder.True<Value>();
predicate = predicate.And(x => x.value1 == "1");
predicate = predicate.And(x => x.value2 == "2");
var vals = Value.AsExpandable().Where(predicate).ToList();
Jeśli mam PredicateBuilder.True<Value>()
, przywraca to, co się spodziewać, ale jeśli mam PredicateBuilder.False<Value>()
, przywraca 0 rekordów. Czy ktoś może wyjaśnić, na czym polega różnica i dlaczego w jednym scenariuszu wracam 0 nagrań, w drugiej dostaję to, czego się spodziewam. Czytałem już dokumentację PredicateBuilder
, ale było to nieco mylące. Mam przeczucie, że ma to związek z tym, że mam orzeczniki w liczbie?
Nie mogę znaleźć żadnej dokumentacji dotyczącej tej klasy, ale przypuszczam, że twoje wywołania tworzą wyrażenie, które jest równoważne "true && (x.value1 ==" 1 ") && (x.value2 == "2") ', które może, ale nie musi być ocenione na' true', w zależności od twoich przedmiotów (stąd otrzymasz "to, czego oczekujesz", cokolwiek to jest). Z drugiej strony, jeśli zaczynasz od 'false', wyrażenie może * nigdy * nie przetestować na' true', ponieważ iing 'false' daje w wyniku" false ". Dlatego wyrażenie predykatu zwraca "false" dla wszystkich elementów i nie otrzymasz żadnych wyników. –
@ O.R.Mapper - Dzięki. Oto dokumentacja: http://www.albahari.com/nutshell/predicatebuilder.aspx – Xaisoft
http://stackoverflow.com/questions/15325245/linqkit-predicatebuilder-returns-all-or-non-rows – mirtiger