简单.数据框架:joindons';不起作用
本文关键字:不起作用 joindons 数据 框架 简单 | 更新日期: 2023-09-27 18:27:38
我正试图用simple.Data进行一个简单的联接,但我无法使其工作。我确信我错过了什么,但我不明白…
SQL:
CREATE TABLE TestA
(
ID INTEGER PRIMARY KEY,
Txt TEXT
);
CREATE TABLE TestB
(
ID INTEGER PRIMARY KEY,
Aref INTEGER,
Txt TEXT,
FOREIGN KEY(Aref) REFERENCES TestA(ID)
);
INSERT INTO TestA
VALUES (1, 'This is Test A!');
INSERT INTO TestB
VALUES (1, 1, 'This is TestB!');
C#:
db.TestB.Find(db.TestB.Aref = db.TestA.ID);
如果我运行代码,我将得到RuntimeBinderException:"Simple.Data.ObjectReference"不包含"Aref"的定义。
我使用的是Simple.Data.Core/Ado版本0.12.2.2和Simple.Data.Sqlite版本0.12.2.4
我已经检查了文件,但我看不出我的错误。我做错了什么?
编辑:我还尝试了索引样式:
db["TestB"].Find(db["TestB"]["TestA"]["ID"] == db["TestB"]["Aref"]);
生成的SQL如下所示:
select [TestB].* from [TestB] JOIN [TestA] ON ([TestA].[Aref] = [TestB].[ID]) where [TestA].[ID] = [TestB].[Aref]
ON部分的表看起来是颠倒的,实际上应该像WHERE部分。。。
试试这个:
using(var db = new MyEntities())
{
var sql = db.TestB.Include("TestA");
var data = sql.ToList();
//the var data will now contain the queried data.
//you could bind the var to a datagrid.
//WPF datagrid
MydataGrid.DataContext = data;
//Asp.net datagrid
MyDatagrid.DataSource = data;
MyDatagrid.DataBind();
//Or loop thru the results
foreach(var item in data)
{
MessageBox.Show("Column -> " + item.ColumnName);
}
}
List<TestB> source = db.TestB.FindAll()
.Select(db.TestB.ID,
db.TestB.Aref,
db.TestB.Txt,
db.TestB.TestA.ID,
db.TestB.TestA.Txt)
.Join(db.TestA).On(db.TestA.ID == db.TestB.Aref);
此示例从表TestB中获取所有记录。您可以在选择部分中选择要获取的列。我希望这对你有帮助。