Błąd "Wyrażenie LINQ nie może zostać przetłumaczone"

0

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
0

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.

1

@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?

0

jaki orm ?
pamietam ze w .net core ~3 chyba był blad z enumami i trzeba bylo to jakiś castować po chińsku
tj. on to probowal do wartosci typu string przyrownac chyba

1
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.

0

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.

0

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));

1 użytkowników online, w tym zalogowanych: 0, gości: 1