Mam metodę, która "nie ma tłumaczenie na SQL", które chcę wykonać na IQueryable, czy istnieje sposób zmusić IQueryable do wykonania bez konieczności przechowywania go w niektórych klasy pośredniej?Wymusić IQueryable do wykonania?
Odpowiedz
Czy problem polega na tym, że metoda ma być uruchamiana lokalnie, a nie w bazie danych? Jeśli tak, to Twój przyjaciel to AsEnumerable
. Jest to bardzo prosta metoda, coś jak:
public IEnumerable<T> AsEnumerable(IEnumerable<T> source)
{
return source;
}
Ważną rzeczą jest to, że sprawia, że typ kompilacji rezultatu IEnumerable<T>
zamiast IQueryable<T>
, co oznacza żadnych operatorów zapytań LINQ zadzwonisz po tym będzie LINQ do Objects zamiast LINQ do SQL.
Na przykład:
var query = context.Employees
// Filtering performed in SQL
.Where(emp => emp.IsFullTime)
.AsEnumerable()
// Projection performed locally; ComputeSalary has no
// SQL equivalent
.Select(emp => new { Employee = emp,
Salary = ComputeSalary(emp) });
Można zadzwonić ToList
jak sugeruje gdzie indziej, ale jeśli robisz filtrowanie i naprawdę nie trzeba pełną listę w pamięci, nazywając AsEnumerable
i filtrowanie że Wynik będzie bardziej wydajny niż ładowanie wszystkiego w pierwszej kolejności.
Czy ta technika z Linq do EF również? Wygląda na to, że tak nie jest. – neontapir
Nie rozumiem, co znaczy "wykonaj lokalnie, a nie w bazie danych". Dla osób takich jak ja: IQueryable
@Tymek: Tak, to wykonanie dwóch zapytań SQL. Ale przez "wykonaj lokalnie" mam na myśli "pobranie wszystkich wyników w zapytaniu do tej pory z bazy danych, ale następnie wykonanie reszty zapytania w pamięci" - dzięki czemu można wykonać filtrowanie, prognozy itp., Które nie mają zastosowania w SQL. –
List<Employees> myEmployees = myqueryable.ToList();
, a następnie możesz robić swoje rzeczy linq na tej liście.
Otrzymujesz tę wiadomość, gdy napisałeś zapytanie, że LinqToSql nie wie, jak przetłumaczyć na SQL (co jest również tym, co mówi).
nie jestem pewien, że dostać dokładnie to, co pytasz, ale o ile widzę, masz następujące opcje:
- przepisać zapytanie tak, że LinqToSql może tłumaczyć to
- Czy jako wiele z zapytaniem, jak można na SQL Server, a następnie zajmiemy się resztą w pamięci (przy użyciu LINQ to Objects)
- usiąść i płakać
Zakładając, że wyklucza # 3, spójrzmy na pozostałe 2 przykłady.
Przepisanie - w tym celu potrzebujemy Twojej zapytania linq.
Tutaj wyjmujesz część, której nie można przetłumaczyć z pierwotnego zapytania, a następnie na Twoje wezwanie do kolorowania ToList, a następnie zastosuj resztę zapytania na tej liście.
Czy można wykonać zapytanie bez konieczności jego zapisywania? Cóż, nie do końca, zawsze można przeglądać wyniki i jako takie nie przechowywać ich w zmiennej, ale oczywiście wyniki kwerendy muszą być przechowywane gdzieś.
Nie trzeba siadać, aby płakać. – mayu
To prawda - jednak nie czuję, że podczas stania nikt nie powinien płakać. Jeśli musisz płakać, musisz to zrobić właściwie. – kastermester
- 1. Jak wymusić zdarzenie do wykonania w MySQL
- 2. Czy mogę wymusić dodatkowy przebieg zaplanowanego wykonania?
- 3. EF - DistinctBy na IQueryable?
- 4. Wymuszenie wszystkich && do wykonania?
- 5. Access DbContext z IQueryable
- 6. Access DataContext behind IQueryable
- 7. OData bez IQueryable
- 8. Tworzenie niestandardowej klasy IQueryable
- 9. IQueryable nie implementuje IDbAsyncEnumerable
- 10. IQueryable C# Wybierz
- 11. Ruby - pobierz plik do wykonania
- 12. Adobe AIR do wykonania programu
- 13. Oczekiwanie na zdarzenie do wykonania
- 14. Wracając pusty IQueryable <>
- 15. LINQ: Usuń elementy z IQueryable
- 16. Jak przekonwertować IQueryable na DataTable
- 17. LINQ i wyliczenia jako IQueryable
- 18. Kod struktury Entity Najpierw IQueryable
- 19. DbContext SaveChanges Zamówienie instrukcji wykonania
- 20. Wdrażanie poprawnego wykonania bloku do ponownej próby
- 21. Tomcat: failed do analizowania deskryptora wykonania
- 22. Zapisywanie do wykonania obrazu procesu na Linuksie
- 23. Używanie Applescript do wykonania skomplikowanego klawisza klawiatury
- 24. Błąd limitu czasu do momentu pomyślnego wykonania
- 25. Jak przekazać klucz PartitionKey do wykonania StoredProcedure?
- 26. Narzędzia do monitorowania wykonania wątku java
- 27. Używanie profilów maven do kontrolowania wykonania kompilacji
- 28. Wzorzec programowania Node.js do uzyskania konturu wykonania
- 29. Błąd C++: Konwersja do zestawu znaków wykonania
- 30. Zamykanie groovy Zamknięcie CPS do równoległego wykonania
To jest ślepy domysł, ale jeśli string.IsNullOrEmpty jest winowajcą, użyj zamiast tego dwóch klauzul where: .Where (o => o.Name! = Null) .Where (o => o.Name.Length> 0) . – mayu