WCF RIA服务,加入域服务中的表

本文关键字:服务 RIA WCF | 更新日期: 2023-09-27 18:27:00

我正在制作一个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.发票表&s.other表。有什么建议可以让这个投影在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; }
}

WCF RIA服务,加入域服务中的表

您的LINQ查询仅使用联接来基本过滤Invoices,因为您在末尾选择了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
            }; );  
} 

我还没有试过测试这个代码,但这个想法应该会让你达到目的。