由於幾個晚上,我被這個問題困住了。我在我的應用程序中有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