2013-04-13 4 views
5

J'écris actuellement une application Windows Store pour Windows 8 et j'utilise SQLite pour la persistance sur la base de données intégrée dans une bibliothèque de classes pour les applications Windows. J'essaye de joindre des données de deux tables différentes dans ma base de données intégrée mais SQLite continue à jeter une exception non soutenue de leur méthode GenerateCommand.Join SQLite dans les tables de base de données incorporées

J'ai actuellement des données dans les deux tables et elles ont toutes deux un ID de question dans chaque table à laquelle elles doivent être jointes. J'ai essayé deux méthodes différentes qui ont toutes les deux la même erreur.

La première méthode:

var q = (from gameTable in db.Table<Model.GameSaved>() 
       join qTable in db.Table<Questions>() on gameTable.QuestionId equals qTable.QuestionId 
       select qTable 
       ).First(); 

La deuxième méthode:

var q = 
       (from question in db.Table<Model.GameSaved>() 
       select question 
       ).Join(db.Table<Questions>(), 
         game => game.QuestionId, 
         questionObject => questionObject.QuestionId, 
         (game,questionObject) => questionObject) 
       .First(); 

Je ne suis pas sûr de ce que je suis absent ici, mais il doit être quelque chose de simple et évident.

Répondre

10

Vous ne manquez rien. Les jointures via linq ne sont pas supportées par Sqlite-net pour le moment. Vous pouvez contourner ce problème en fournissant votre propre SQL et en utilisant la méthode Query. Votre première requête de ci-dessus devient quelque chose comme:

var q = db.Query<Questions>(
    "select Q.* from Questions Q inner join GameSaved G" 
    + " on Q.QuestionId = G.QuestionId" 
).First(); 

Si vous êtes si incliné, la méthode Query prend également en charge les paramètres. De la Sqlite-net readme:

db.Query<Val>(
    "select 'Price' as 'Money', 'Time' as 'Date' from Valuation where StockId = ?", 
    stock.Id); 
+0

Nous vous remercions de votre réponse! Il semblait que SQLite-net ne supportait pas les jointures parce que cela n'avait pas de sens mais maintenant je comprends mieux les restrictions. –

Questions connexes