我如何使用Sqlite.Net Extensions Filter

时间:2016-08-30 14:58:22

标签: c# sqlite mono sqlite.net

我正在使用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.TableQuery 1[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.TableQuery 1[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.List 1[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](IEnumerable 1 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表达式,如果是这种情况,可以使用什么替代方法/该方法应该如何使用?

1 个答案:

答案 0 :(得分:0)

所以看起来Sqlite.Net无法处理嵌套在另一个lamdba表达式中的Lambda表达式。因此,我将我的过滤器更改为:

var NewCalls = conn.GetAllWithChildren<DiaryCall>(x => filteredCalls.Contains(x.Id));