RIA服务:包括选择(许多)不工作

我有两种实体类型: Document (有一个Customer )和Customer (有一个Collection Documents

我的疑问是根据客户的姓名或号码为客户提供文件。

查询如下所示:

 public IQueryable GetCustomerDocuments(DateTime startDate, DateTime endDate, string filterText) { return this.ObjectContext.Customers .Where(c => c.CustomerName.Contains(filterText) || c.CustomerNumber.Contains(filterText)) .SelectMany(c => c.Documents) .Where(d => d.Date >= startDate && d.Date <= endDate); } 

当查询返回时,我希望它包含DocumentCustomer实体….

我已经尝试了我能想到的一切,包括Include("Documents.Customer")Include("Customer")等。

我肯定在元数据中设置了IncludeAttribute

思考? 这有可能吗?

谢谢!

我没有使用投影和SelectMany ,而是使用连接编写了一个LINQ查询:

  var v = from cust in (from c in this.ObjectContext.Customers where (c.CustomerName.Contains(filterText) || c.CustomerNumber.Contains(filterText)) select c) join doc in this.ObjectContext.Documents on cust.CustomerNumber equals doc.CustomerNumber where doc.Date >= startDate && doc.Date <= endDate select doc; return ((ObjectQuery)v).Include("Customer").AsQueryable(); 

这解决了这个问题!

.Include工作在ObjectQuery之外,当添加任何自定义投影时,它的效果将被撤消。 您可以尝试以下选项:

根据Document重写查询:

 return this.ObjectContext.Documents.Include("Customers") .Where(d => d.Customers.Any(c => c.CustomerName.Contains(filterText) || c.CustomerNumber.Contains(filterText)) .Where(d => d.Date >= startDate && d.Date <= endDate); 

这可能会也可能不会起作用,可能会也可能不会产生正常的sql; 待测试。

另一种可能性是定义DTO对象

 class CustomerDocument { public Customer {get;set;} public Document {get;set;} } 

然后您的查询变为:

 return from c in this.ObjectContext.Customers from d in c.Documents where (c.CustomerName.Contains(filterText) || c.CustomerNumber.Contains(filterText)) && d.Date >= startDate && d.Date <= endDate select new CustomerDocument {Customer = c, Document = d};