2017-06-28 1 views
0

Ich habe Tabelle in einer SQLite-Datenbank in einer Xamarin Forms App mit etwa 12000 Elemente darin gespeichert. Wenn ich versuche, nur eine Spalte mit der folgenden Abfrage zurückzugeben, habe ich eine Liste mit allen 12000 Werten erhalten, aber die Einträge der Liste sind null.Quering Sqlite-Tabelle mit Linq gibt eine Liste mit leeren Elementen

-Code für die Klasse:

public class BaseModel 
{ 
     private int? _PrimaryKey; 
     private string _Code; 
     private string _Name; 

     [PrimaryKey, Required, NotNull] 
     public int? PrimaryKey { get { return _PrimaryKey; } set { _PrimaryKey = value; } } 

     public string Code { get { return _Code; } set { _Code = value; } } 

     public string Name { get { return _Name; } set { _Name = value; } } 
} 

ich die Tabelle mit der folgenden Zeile zur Abfrage:

internal T GetInsertItem<T>() where T : BaseModel, new() 
{ 
T item = new T(); 
//... 
List<int?> items = new List<int?>(_Conn.Table<T>().Select(ac => ac.PrimaryKey)); 
//... 
return item; 
} 

So ist das Ergebnis nicht das, was ich erwartet hatte. Ich habe die vollständige Liste mit 12000 Elementen, aber jedes Element ist NULL. Warum?

Image from the debugging ...

Wenn ich eine weitere Abfrage wie die folgende verwenden es funktioniert, wie ich erwartet hatte.

List<T> items = new List<T>(_Conn.Table<T>().Where<T>(ac => ac.PrimaryKey > 1000)); 
+0

Gibt es in der Datenbank eine Spalte namens 'PrimaryKey'? Wie viele Datensätze befinden sich in der Tabelle? Wie viele von ihnen haben eine NULL 'PrimaryKey'? – mjwills

+0

Nur ein paar Kommentare: Es ist seltsam, dass Sie die 'PrimaryKey'-Eigenschaft als 'Nullable ' definieren, aber auch mit dem 'NotNull'- oder' PrimaryKey'-Attribut dekorieren (der Primärschlüssel ist standardmäßig nicht nullbar). Anstatt den 'List new Operator' aufzurufen, können Sie auch die' ToList() 'Methoden aufrufen. Welche API verwenden Sie, um diesen Code zu erzeugen: '_Conn.Table ()'? – fharreau

+0

@mjwills in der Tabelle sind etwa 12000 Zeilen, das Feld existiert in der Tabelle und keine Zeile hat einen Null-Wert für den Primärschlüssel – ChrisJ

Antwort

1

Es scheint ein Fehler in SQLite-net bei der Umsetzung wählen ist, so _Conn.Table<T>().ToList() aufrufen und dann die Auswahl .Select(...) hilft. sqlite-net issues

Verwandte Themen