SQLite在嵌入式数据库表中的连接

7

我目前正在编写一款Windows 8应用程序,并在Windows应用程序的类库中使用SQLite作为嵌入式数据库的持久化。我试图从两个不同的表中联接数据,但是SQLite在其GenerateCommand方法中不断抛出一个不支持的异常。

我目前在两个表中都有数据,并且它们都有一个questionId可以用于联接。我尝试了两种不同的方法,但都会抛出相同的错误。

第一种方法:

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

第二种方法:
    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();

我不确定我在这里错过了什么,但一定是某些简单明显的东西。

1个回答

12

你没有错过任何东西。目前 Sqlite-net 不支持通过 Linq 进行连接操作。你可以通过提供自己的 SQL,并使用 Query 方法来解决这个问题。你上面的第一个查询会是这样的:

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

如果你愿意的话,Query方法也支持参数。来自Sqlite-net readme

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

谢谢你的回答!一开始我觉得SQLite-net不支持连接查询是因为这样做没有意义,但现在我更明白了它的限制。 - Liz Miner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接