由于几个晚上,我被这个问题困住了。我在我的应用程序中有SQLite
数据库。我从文件创建了SQLite数据库。该ERD图如下所示: SQLite - 使用LINQ检索数据
现在在我的应用程序创建我的数据库的连接:
using (var conn = new SQLiteConnection(DB_PATH))
{
// retrieving statemets...
}
我创建了代表我的数据库表类:
public class Kantory
{
public Kantory()
{
this.kursy = new HashSet<Kursy>();
}
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_kantory { get; set; }
public string nazwa { get; set; }
public virtual ICollection<Kursy> kursy { get; set; }
}
public class Waluty
{
public Waluty()
{
this.kursy = new HashSet<Kursy>();
}
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_waluty { get; set; }
public string nazwa { get; set; }
public virtual ICollection<Kursy> kursy { get; set; }
}
public class Kursy
{
[SQLite.PrimaryKey, SQLite.AutoIncrement]
public int id_kursy { get; set; }
public int id_kantory { get; set; }
public int id_waluty { get; set; }
public decimal kurs { get; set; }
public System.DateTime data { get; set; }
public int aktualne { get; set; }
public virtual Kantory kantory { get; set; }
public virtual Waluty waluty { get; set; }
}
正如你所看到的,在kursy
表中我有两个外键 - id_kantory
和id_waluty
。
而现在很奇怪和奇怪的事情发生。当我尝试使用普通的SQL statemets与INNER JOIN
语句检索一些信息 - 它工作得很好!:
using (var conn = new SQLiteConnection(DB_PATH))
{
var query = new SQLiteCommand(conn);
query.CommandText = "SELECT * FROM Kursy INNER JOIN Kantory ON Kursy.id_kursy=Kantory.id_kantory WHERE Kantory.id_kantory = 1";
var result = query.ExecuteQuery<Kursy>();
}
此代码工作正常!但是,当我试图使用LINQ像这样用我的课:
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.kantory.id_kantory == 1).FirstOrDefault();
}
它抛出我NotSupportedException异常!的消息话题:会员访问失败编译表达
但是当我使用使用LINQ 我的课没有加入另一个类它的工作原理!:
using (var conn = new SQLiteConnection(DB_PATH))
{
var result = conn.Table<Kursy>().Where(k => k.id_kursy == 1).FirstOrDefault();
}
到底
所以:我的问题是我无法使用LINQ查询加入更多的表。似乎这种模式在课堂上是错误的,但我真的不知道为什么...
PS。这是Windows Phone 8.1应用程序,所以我无法使用实体框架。
Sqlite-net不支持外键 – ErikEJ 2015-02-07 13:29:00
@ErikEJ,嗯,但是当我使用正常的SQL语句,如上所示使用'SELECT ... FROM ... INNER JOIN ...'时,它可以工作。所以它可能使用外键,不是吗? – XardasLord 2015-02-07 13:35:16
它不会将连接从LINQ转换为SQL – ErikEJ 2015-02-07 14:00:40