Problem pojawia się przy funkcji .Contains
, macie pomysł jak to poprawić?
Where(x => x.ProffesionTypes.Any(p => profTypes.Contains(p)))
System.InvalidOperationException: The LINQ expression 'p => __profTypes_0.Contains(p)' could not be translated
Nie rozumiem co to query ma robić, co chcesz sprawdzić... I nie możesz wrzucić delegata do Contains z tego co się orientuję.
Podaj logikę to zrobimy query jak trzeba.
@rjakubowski:
Prawdpodobnie OP chce zrobić coś takiego WHERE costam IN (val1, val2, val3)
, czyli po LINQ-owemu byłoby coś w stylu var users = db.Where(x => idsToFind.Contains(x.UserId));
ale Contains
działa tylko z int i guid z tego co pamiętam.
@Bartosz T:
Jakiego typu jest ProfessionType
?
Bartosz T napisał(a):
Problem pojawia się przy funkcji Contains, macie pomysł jak to poprawić?
Where(x => x.ProffesionTypes.Any(p => profTypes.Contains(p)))
System.InvalidOperationException: The LINQ expression 'p => __profTypes_0.Contains(p)' could not be translated
Nie wszystko co napiszesz w C# mapuje się na SQL'a i najwyraźniej to nie i stąd błąd. Przerób zapytanie (jeśli się da - tutaj za mało info dałeś) lub zobacz czy możesz skorzystać z DbFunction.
Czym jest profTypes? Jeśli profTypes siedzą w pamięci a nie po stronie bazy to jak ma to działać?
Na czym wywolujesz tego Where? Jaki to typ?
Ciągle malo kontekstu.
Jeśli profTypes siedzą w pamięci a nie po stronie bazy to jak ma to działać? 😉
w zależności od typu np. in
:)
You blow my mind, jeśli ProffesionTypes jest enumem, to jak bez rzutowania chcesz wykonywać na nim operacje Linq? BTW. IDE tego nie podkreśla?
Te operacje wykonujesz na elementach dziedziczących po IEnumerable.
Zcastuj to w taki sposób:
var castedProffesionTypes = Enum.GetValues(typeof(ProffesionTypes)).Cast<ProffesionTypes>();
Co do zapisu,
Where(x => x.ProffesionTypes.Any(p => profTypes.Contains(p)))
Jeśli chcesz wypisać wszystkie rekordy, to nie musisz stosować Select (teoretycznie, ale bez niego w EF siada optymalizacja, więc lepiej dopisać).
Jeśli chcesz uzyskać SQL-owy zapis IN
to powinieneś zastosować zapis typu
.Where(u => castedProffesionTypes.Contains(to co zawiera));
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.