c# - 如何使用 Sqlite.Net 扩展过滤器

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

但是这段代码返回错误:

[ERROR] FATAL UNHANDLED EXCEPTION: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NotSupportedException: Cannot compile: Lambda 08-30 15:46:57.210 E/mono-rt (16849): at SQLite.Net.TableQuery1[T].CompileExpr (System.Linq.Expressions.Expression expr, System.Collections.Generic.List1 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.List1 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.TableQuery1[T].GetEnumerator () [0x00008] in :0 08-30 15:46:57.210 E/mono-rt (16849): at System.Collections.Generic.List1[T]..ctor (IEnumerable1 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.Expression1 filter, Boolean recursive) [0x00015] in /Users/redent/Documents/workspace/sqlite-net-extensions/SQLiteNetExtensions/Extensions/ReadOperations.cs:60

那么我应该如何使用 GetAllWithChildren方法不会崩溃?文档相当稀疏

额外

这是line where the method is implemented

Sqlite 可能不支持 lambda 表达式,如所述 here如果是这种情况,有什么替代方案/应该如何使用此方法?

最佳答案

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

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

关于c# - 如何使用 Sqlite.Net 扩展过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230916/

相关文章:

.net - WCF Mono - 使用 SSL 的 BasicHttpBinding

f# - 在 Mono 2.8 上编译 F# 代码

c# - Visual Studio 中的正常设置

c# - 了解如何在 iOS Designer 中使用 "Container View"

ios - 使用 iCloud 进行应用程序数据库备份,但不同步

c# - 使用SqlConnection连接到SQLite时出错,为什么?

.net - 与 PostgreSQL 一起使用的 Mono ORM?

c# - 具有命名空间限制的通用类型

c# - 根据本地时间从数据库中检索记录

ios - 从另一个 ViewController Swift 4 访问对象(SQLite 表)