WCF RIA - объединение двух таблиц

Я нашел много объяснений по этому вопросу, но ничего, что действительно помогло бы мне. Дело простое. У меня есть две таблицы в моей модели данных: Events и TimeStamps, обе имеют поле EntryID, которое является отношением между ними (таблицы на самом деле являются представлениями, я не могу выполнять изменения в БД, я могу только запрашивать их). На моем domainService у меня есть созданные методы для получения данных из каждой из таблиц. Пока что я могу заполнить dataGrid данными только из одной из таблиц, но мне действительно нужно отображать данные из обеих таблиц. В T-SQL это будет примерно так:

  Select e.EntryID,t.closed_time
  from Events e inner join TimeStamps t
  on e.EntryID=t.EntryID

Поэтому я хочу отобразить в своей сетке данных Entry_ID и Closed_Time. Я ценю вашу помощь в решении моей проблемы.

Я попробовал новый пользовательский класс

    public class CustomTable
    {
        public string EntryId { get; set; }
        public int closed_time { get; set; }
    }

    public IQueryable<CustomTable> GetJoined()
    {
        return (from i in this.ObjectContext.Events                   
                join p in this.ObjectContext.TimeStamps p
                on i.Entry_ID equals p.Entry_ID
                select new CustomTable
                {
                    EntryId = i.Entry_ID,
                    closed_Time = p.Closed_TIME
                });
    }

Это дополнительный код, который я добавил сам, я уверен, что чего-то не хватает, этот метод и сам класс были добавлены в мой сервис.cs


person Avrum    schedule 27.07.2012    source источник
comment
Что вы пытаетесь (код)? Какой тип возврата вы передаете через RIA?   -  person Gone Coding    schedule 27.07.2012
comment
см. дополнительную информацию выше-Спасибо   -  person Avrum    schedule 27.07.2012
comment
Что происходит, когда вы делаете RIA-вызов метода GetJoined()? Сначала присвойте возвращаемое значение var (вместо того, чтобы возвращать его немедленно) и проверьте его в отладчике (вы можете расширить результаты), чтобы убедиться, что вы действительно получаете данные обратно из своей базы данных.   -  person Gone Coding    schedule 27.07.2012
comment
В этот момент я получаю сообщение об ошибке компиляции, MyProject.Web.g.cs создал метод: public EntityQuery‹IncidentService.CustomTable› GetJoinedQuery() и я получаю сообщение об ошибке: Ошибка 3 Тип или имя пространства имен 'IncidentService' может не найден (вам не хватает директивы использования или ссылки на сборку?)   -  person Avrum    schedule 28.07.2012
comment
хорошо, я исправил предыдущую проблему, я создал новый класс вне IncidentService. Я получаю что-то еще сейчас, я скоро обновлю, спасибо   -  person Avrum    schedule 28.07.2012
comment
Привет, мне удалось запустить свой проект, проблема в том, что я получаю сетку данных без каких-либо данных. Я вижу строки на ней (формат зебры), но они пустые и очень узкие. Я попытался уменьшить количество результатов до 1 и вообще никаких данных   -  person Avrum    schedule 29.07.2012
comment
Ну, это работает сейчас. Проблема заключалась в том, что я выбрал неправильные параметры для сетки данных, поэтому я получил ее пустой. Я изменил параметры (с Entry_ID на EntryId и с Closed_TIME на время закрытия   -  person Avrum    schedule 29.07.2012


Ответы (1)


Это окончательный код и выполненные процедуры, не забывайте собирать проект после каждого шага:

1- Открыт новый класс в Myproject.Web(Добавить-->новый элемент-->класс)

namespace Myproject.Web
{

    public class CustomTable
    {
        [Key]
        public string EntryId { get; set; }
        public int closed_Time { get; set; }
    }
}

2-Добавлено в IncidentService.cs:

public IQueryable<CustomTable> GetJoined()
{
    return (from i in this.ObjectContext.Events                   
            join p in this.ObjectContext.TimeStamps p
            on i.Entry_ID equals p.Entry_ID
            select new CustomTable
            {
                EntryId = i.Entry_ID,
                closed_Time = p.Closed_TIME
            });
}

3-Добавлено на Mypage.xaml.cs

public MyPage()
{
    InitializeComponent();


    this.dataGrid1.ItemsSource = _IncidentContext.CustomTables;
    _IncidentContext.Load(_IncidentContext.GetJoinedQuery());



    DataGridTextColumn entry = new DataGridTextColumn();
    entry.Binding = new System.Windows.Data.Binding("EntryId");
    entry.Header = "Entry Id";

    DataGridTextColumn closed = new DataGridTextColumn();
    closed.Binding = new System.Windows.Data.Binding("closed_Time");
    closed.Header = "Closed Time";

    dataGrid1.Columns.Add(entry);
    dataGrid1.Columns.Add(closed);

}

Я надеюсь, что это поможет другим с такой же проблемой, я потратил 3 дня на это решение!

person Avrum    schedule 29.07.2012