Ich habe den folgenden Aufruf in meinem ViewModel.Ausdrücke, die an die Repository-Methode übergeben werden, werden nicht korrekt kompiliert.
Order order= await DataService.Orders.GetAsync(p => p.Id == Guid.Parse("07fafcd9-10db-e511-848d-005056b94716"));
die Aufträge Repository hat die folgende Methode.
public async Task<T> GetAsync(Expression<Func<T, bool>> predicate)
{
return await Db.FindAsync<T>(predicate).ConfigureAwait(false);
}
Db
Eigenschaft ist vom Typ SQLiteAsyncConnection
. Das oben angegebene Prädikat I wird in die folgende Darstellung übersetzt.
{p => (p.Id == Parse("07fafcd9-10db-e511-848d-005056b94716"))}
Die obige Prädikat wird eine Ausnahme mit der folgenden Meldung
keine solche Funktion werfen:
So analysieren ich das Bestehen der Guid.Parse
Funktion nach unten, die nicht existiert, ähnliche Ausnahme wird es geworfen, wenn ich das folgende Prädikat habe.
Order order= await DataService.Orders.GetAsync(p => p.Id == anotherInstanceObject.Id);
Die Lösung ist, meinen Code mit der Übergabe des tatsächlichen Wertes zu ersetzen.
Guid guid = Guid.Parse("07fafcd9-10db-e511-848d-005056b94716");
Order order= await DataService.Orders.GetAsync(p => p.Id == guid);
Aber der oben ist so unlogisch und wird eine Menge Probleme vorstellen, wenn Entwickler beginnen die DataService
Klasse.
Ich verwende SQLite.Net-PCL für meinen Datenzugriff.
Was fehlt mir, damit das Prädikat korrekt auf meine Repository-Methode kompiliert wird?
Ich verwende https://github.com/oysteinkrog/SQLite.Net-PCL für meinen Datenzugriff lokal. Ich hatte gehofft, dass ich nicht damit leben muss, irgendwelche Links, wo ich anfangen kann, zu erforschen, wie man dieses Schreiben meines eigenen Proxy-LINQ-Anbieters repariert? –
Google für "LINQ-Anbieter" ... Sie werden sich wahrscheinlich nicht mit diesem Ansatz zufrieden geben. Es ist Raketenwissenschaft. Ich weiß, weil ich ein ausgeklügeltes geschrieben habe, das viele Dinge tut. Warum benutzen Sie diesen eher exotischen Linq-Anbieter? Ich würde zuerst die Mainstream-EF versuchen. Die Verwendung solcher Nischen-Frameworks für Core-Infrastrukturen, die schwer zu ersetzen sind, ist eine fragwürdige Strategie. – usr
Ich kann EF nicht verwenden, muss eine Cross-Plattform-Lösung unterstützen und sqlite-net-pcl ist der Weg zu gehen. –