Как использовать фильтр расширений Sqlite.Net

Я использую библиотеку Sqlite.Net Extensions для получения объектов из моей базы данных.

У меня есть список Id's и я хотел бы получить все объекты из базы данных, где мой список содержит этот идентификатор.

Я получил следующее:

var filteredCalls = listOfIds;            
var conn = Databsae.Connection;
var NewCalls = conn.GetAllWithChildren<Call>(x => filteredCalls.Any(y => y == x.Id));

Но этот код возвращает ошибку:

[ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> System.NotSupportedException: Невозможно скомпилировать: Lambda 08-30 15:46:57.210 E/mono-rt (16849): в SQLite.Net.TableQuery1[T].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List1 queryArgs) [0x007aa] в:0 08-30 15:46:57.210 E/mono-rt (16849): в SQLite.Net.TableQuery1[T].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List1 queryArgs) [0x001a5] в: 0 08-30 15: 46: 57,210 E / mono-rt (16849): в SQLite.Net.TableQuery1[T].GenerateCommand (System.String selectionList) [0x0006d] in <filename unknown>:0 08-30 15:46:57.210 E/mono-rt (16849): at SQLite.Net.TableQuery1 [T].GetEnumerator () [0x00008] в: 0 08-30 15: 46: 57,210 E / mono-rt (16849): в System.Collections.Generic.List1[T]..ctor (IEnumerable1 коллекция) [0x00073] в /Users/builder/data/lanes/3540/1cf254db/source/mono/external/referencesource/mscorlib/system/collections/generic/list.cs:98 08-30 15:46:57.210 E/mono-rt (16849): в System.Linq.Enumerable.ToList [TSource] (IEnumerable1 source) [0x00011] in /Users/builder/data/lanes/3540/1cf254db/source/mono/external/referencesource/System.Core/System/Linq/Enumerable.cs:835 08-30 15:46:57.210 E/mono-rt (16849): at SQLiteNetExtensions.Extensions.ReadOperations.GetAllWithChildren[T] (SQLite.Net.SQLiteConnection conn, System.Linq.Expressions.Expression1 фильтр, логическая рекурсия) [0x00015] в /Users/redent/Documents/workspace/sqlite-net-extensions/SQLiteNetExtensions/Extensions/ReadOperations.cs:60

Так как я должен использовать GetAllWithChildren метод без сбоев? Документация довольно скудная

дополнительный

Это линия, где метод реализован

Возможно, лямбда-выражения не поддерживаются в Sqlite, как указано здесь, если это так, какова альтернатива / как предполагалось использовать этот метод?

1 ответ

Решение

Так это выглядело как Sqlite.Net не может справиться с лямбда-выражением, вложенным в другое выражение лямбды. Поэтому я изменил свой фильтр на:

var NewCalls = conn.GetAllWithChildren<DiaryCall>(x => filteredCalls.Contains(x.Id));
Другие вопросы по тегам