Ich habe ein UWP
Projekt, das mit Sqlite
Datenbank arbeitet. Ich habe sqlite-net-pcl
zu meinen Referenzen hinzugefügt. Ich möchte REGEXP
in select
Abfrage verwenden, aber es gibt mir die no such function: REGEXP
. Ich suchte den Fehler, aber die Ergebnisse sind etwa SQLiteFunction
, die hier nicht definiert ist. was soll ich tun?Wie REGEXP verwendet in `SQLite-net-pcl` in UWP
Antwort
Am Ende ich sqlite-net-pcl
von nuget
nicht derjenige installiert die Universal windows extensions
in ReferenceManger.
sqlite-net-pcl
paket in nugget hat sqlite3_create_function
methode.
SQLiteConnection con = new SQLiteConnection(@"myDB.db");
SQLitePCL.raw.sqlite3_create_function(con.Handle, "REGEXP", 2, null, MatchRegex);
private void MatchRegex(sqlite3_context ctx, object user_data, sqlite3_value[] args)
{
bool isMatched = System.Text.RegularExpressions.Regex.IsMatch(SQLitePCL.raw.sqlite3_value_text(args[1]), SQLitePCL.raw.sqlite3_value_text(args[0]),RegexOptions.IgnoreCase);
if (isMatched)
SQLitePCL.raw.sqlite3_result_int(ctx, 1);
else
SQLitePCL.raw.sqlite3_result_int(ctx, 0);
}
das funktioniert gut :)
The LIKE, GLOB, REGEXP, and MATCH operators Ref:
REGEXP Der Operator ist eine spezielle Syntax für den regulären Ausdruck() Benutzer-Funktion. Keine regexp() - Benutzerfunktion ist standardmäßig definiert, daher führt die Verwendung des REGEXP-Operators normalerweise zu einer Fehlermeldung. Wenn zur Laufzeit ein application-defined SQL function namens "regexp" hinzugefügt wird, wird der Operator "X REGEXP Y" als Aufruf von "regexp (Y, X)" implementiert.
Um REGEXP zu verwenden, müssen wir in der Lage sein, benutzerdefinierte Funktionen zu erstellen. Und SQLiteFunction ist die Klasse, die entwickelt wurde, um benutzerdefinierte Funktionen einfach in System.Data.SQLite zu behandeln. System.Data.SQLite ist jedoch ein ADO.NET-Provider für SQLite, der in UWP-Apps nicht verwendet werden kann.
In SQLite-net PCL gibt es keine solche Methode. SQLite-net PCL verwendet jedoch SQLitePCL.raw darunter, das ist ein sehr dünner C# -Wrapper um die C-API für SQLite und bietet einfachen (rohen) Zugriff auf SQLite. Mit SQLitePCL.raw können wir benutzerdefinierte Funktionen als was in @ Maryams Antwort erstellen.
Wenn Sie so etwas wie SQLite PCL Recht verwenden können, können Sie wie folgt vorgehen (mit anderen PCLs arbeiten, nicht sicher, obwohl):
using System;
using SQLitePCL.pretty;
using System.Text.RegularExpressions;
namespace TestSqlite
{
class Program
{
static void Main(string[] args)
{
Func<ISQLiteValue, ISQLiteValue, ISQLiteValue> regexFunc =
(ISQLiteValue val, ISQLiteValue regexStr) =>
{
if (Regex.IsMatch(Convert.ToString(val), Convert.ToString(regexStr)))
return true.ToSQLiteValue();
return false.ToSQLiteValue();
};
SQLitePCL.Batteries.Init();
SQLiteDatabaseConnection _dbcon = SQLiteDatabaseConnectionBuilder
.InMemory
.WithScalarFunc("REGEXP", regexFunc)
.Build();
string sql = "CREATE TABLE foo (a int, b text);";
_dbcon.ExecuteAll(sql);
_dbcon.ExecuteAll(@"INSERT INTO foo VALUES (1, 'this is me');
INSERT INTO foo VALUES (2, 'that is me');
INSERT INTO foo VALUES (3, 'he is me');");
sql = "SELECT * FROM foo where '\\w{4} is me' REGEXP b;";
foreach (var row in _dbcon.Query(sql)) { Console.WriteLine(row[1].ToString()); }
}
}
}
- 1. Binding ComboBox in UWP verwendet MvvmCross
- 2. Wie suchen "\ .... \" regexp in Elasticsearch
- 3. Wie verwendet man OSM Offline-Karten in uwp?
- 4. Wie verwendet man mehrere Attribute in StaticResource (uwp)?
- 5. Wie in UWP App drucken?
- 6. Muster in regexp
- 7. Regexp in Switch-Anweisung
- 8. RegExp in TypeScript
- 9. Regexp Problem in htaccess
- 10. Invert Regexp in Vim
- 11. Korrespondierende Regexp In Javascript
- 12. In DirectX mit UWP, kann Win32 verwendet werden?
- 13. Composable Regexp in Python
- 14. REGEXP in Java-Code
- 15. Named Capture in Regexp
- 16. Regexp Anpassung in Schwein
- 17. Wie funktioniert ContentPresenter in UWP?
- 18. Wie OS Ausgabe in UWP
- 19. Wie aktuelle Seite in UWP
- 20. UWP, wie Textausrichtung in Content
- 21. Wie behandelt HardwareButtons.BackPressed in UWP?
- 22. Wie Desktop-Bildschirm in UWP
- 23. Konvertieren von String in Regexp in Ruby
- 24. Authentifizierung in UWP-Anwendung
- 25. Regexp in bash - bearbeiten Linien
- 26. JavaScript RegExp Kompatibilität in IE
- 27. Wie benutze ich regexp in elasticsearch?
- 28. Wie Raum passen, Newline in regexp
- 29. Wie regexp Negation in SQLite zu implementieren?
- 30. Wie verwende ich RegExp in Javascript?
Wow! Habe nicht bemerkt, dass 'SQLite-net PCL' auf' SQLitePCL.raw' aufgebaut ist. 'sqlite3_create_function' Methode ist eigentlich keine Methode von' SQLite-net PCL', sondern die Methode in 'SQLitePCL.raw'. Wie auch immer, eine großartige Lösung für dieses Problem. ;) –