Службы RIA WCF, объединение таблиц в домене - PullRequest
1 голос
/ 07 марта 2012

Я делаю приложение Silverlight WCF RIA Services. Хотя я застрял, пытаясь разными способами использовать несколько таблиц в базе данных. В настоящее время я пытаюсь объединить таблицы в классе обслуживания домена и вернуть его агенту службы. Я начал этот проект с шаблона, расположенного по адресу: http://simplemvvmtoolkit.codeplex.com/wikipage?title=WCF%20RIA%20Services

Я пытаюсь объединить таблицы как:

    public IQueryable<Invoice> GetInvoices()
    {
        return (from i in this.ObjectContext.Invoices 
                join o in this.ObjectContext.otherTable equals condition 
                join s in this.ObjectContext.otherTable equals condition 
                select i); 
    }

Это правильно объединяет таблицы в зависимости от заданных условий. Но мне действительно нужно спроектировать поля из обеих таблиц i.Invoices и s.otherTable. Любые предложения, чтобы этот проект работал в DomainServiceClass.cs?

ОБРАЗЕЦ КОДА ПОЛЬЗОВАТЕЛЯ "Chris" Предложение:

    public class Invoice_PM
    {
    [Key]
    public int InvoiceId { get; set; }

    public string PaymentNum { get; set; }

    public DateTime? PaymentExpDate { get; set; }

    public DateTime? InvoiceDateTime { get; set; }

    [Include, Association("name", "InvoiceID", "InvoiceDateTime")]
    public IEnumerable<InvoiceSoldToShipTo_PM> SoldToShipTo { get; set; }
}

1 Ответ

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

Ваш запрос LINQ использует только объединения для базовой фильтрации счетов-фактур, поскольку в конце вы выбираете переменную i. Я думаю, что ответ на этот пост даст вам результат, который вы хотите:

Ошибка: сущность или сложный тип не могут быть созданы в запросе LINQ to Entities

Я предлагаю вам создать собственный класс со всеми свойствами, которые вы хотите загрузить, и выбрать результаты вашего оператора LINQ в свой пользовательский класс.

Пользовательский класс:

public class CustomInvoice
{
    public int InvoiceID { get; set; }
    public int InvoiceNumber { get; set; }
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public int InvoiceID { get; set; }
    public string CustomerName { get; set; }
}

Функция службы домена:

public IQueryable<CustomInvoice> GetInvoices() 
{ 
    return (from i in this.ObjectContext.Invoices  
            join p in this.ObjectContext.Product equals condition  
            join c in this.ObjectContext.Customer equals condition  
            select new CustomInvoice
            { 
                InvoiceID = i.ID, 
                InvoideNumber = i.InvoiceNumber, 
                ProductID = p.ID, 
                ProductName = p.Name, 
                CustomerID = c.ID, 
                CustomerName = c.Name
            }; );  
} 

Я не пробовал тестировать этот код, но идея должна помочь вам.

...