2016-08-30 2 views
0

Sqlite.Net Extensions 라이브러리를 사용하여 데이터베이스에서 개체를 가져옵니다.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.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 filter, Boolean recursive) [0x00015] in /Users/redent/Documents/workspace/sqlite-net-extensions/SQLiteNetExtensions/Extensions/ReadOperations.cs:60

나는 그것이 충돌없이 GetAllWithChildren 방법을 사용하기로되어 있어요 어떻게? 문서는이 사건의 경우 here 진술로 line where the method is implemented

아마도 람다 표현식은 SQLite는 지원되지 않습니다이다

추가, 대안이 무엇인지 /이 방법은 방법

이었다 매우 드문 드문 사용하게 될까요?

답변

0

그래서 Sqlite.Net은 다른 lamdba 표현식에 중첩 된 람다 표현식을 처리 할 수 ​​없습니다. 따라서 내 필터를 다음과 같이 변경했습니다.

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