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); }
当查询返回时,我希望它包含Document
和Customer
实体….
我已经尝试了我能想到的一切,包括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;} }
然后您的查询变为:
上述就是C#学习教程:RIA服务:包括选择(许多)不工作分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
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};
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012188.html