Фреймворк Simple.Data: объединение не работает - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь сделать простое соединение с 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 v0.12.2.2 иSimple.Data.Sqlite v0.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 ...

Ответы [ 2 ]

0 голосов
/ 02 декабря 2014
      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. Вы можете выбрать, какой столбец вы хотите получить в разделе выбора. Я надеюсь, что это поможет вам.

0 голосов
/ 13 марта 2012

Попробуйте это:

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);
    }


}
...