我正在使用Sqlite.Net Extensions库从我的数据库中获取对象。
我有一个Id's
列表,我想从数据库中获取我的列表中包含该Id的所有对象。
我有以下内容:
var filteredCalls = listOfIds;
var conn = Databsae.Connection;
var NewCalls = conn.GetAllWithChildren<Call>(x => filteredCalls.Any(y => y == x.Id));
但是这段代码会返回错误:
[错误]致命未处理例外情况: System.Reflection.TargetInvocationException:抛出了异常 通过调用的目标。 ---&GT; System.NotSupportedException: 无法编译:Lambda 08-30 15:46:57.210 E / mono-rt(16849):at SQLite.Net.TableQuery
1[T].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List
1 queryArgs)[0x007aa] in:0 08-30 15:46:57.210 E / mono-rt(16849):at SQLite.Net.TableQuery1[T].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List
1 queryArgs)[0x001a5] in:0 08-30 15:46:57.210 E / mono-rt(16849):at 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.TableQuery
1 [T] .GetEnumerator() [0x00008] in:0 08-30 15:46:57.210 E / mono-rt (16849):at System.Collections.Generic.List1[T]..ctor (IEnumerable
1 collection)[0x00073] in /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):at 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.Expression
1过滤器,布尔递归) [0x00015] in /Users/redent/Documents/workspace/sqlite-net-extensions/SQLiteNetExtensions/Extensions/ReadOperations.cs:60
那么我怎么能在不崩溃的情况下使用GetAllWithChildren
方法呢?文档非常稀少
附加
这是line where the method is implemented
如果是here,Sqlite可能不支持lambda表达式,如果是这种情况,可以使用什么替代方法/该方法应该如何使用?
答案 0 :(得分:0)
所以看起来Sqlite.Net
无法处理嵌套在另一个lamdba表达式中的Lambda表达式。因此,我将我的过滤器更改为:
var NewCalls = conn.GetAllWithChildren<DiaryCall>(x => filteredCalls.Contains(x.Id));