【发布时间】:2013-08-02 05:25:56
【问题描述】:
我正在尝试为需要使用实体框架访问相关表中的信息的数据库表编写搜索函数。但是,在对父表和相关表进行连接后,我遇到了从初始查询中取回数据的问题。我的代码目前看起来像这样。我初始化我的可查询对象
IQueryable<PurchaseOrder> po = _context.PurchaseOrders;
其中 PurchaseOrder 是一个实体类型。然后就是这样一连串的积木。
if (!String.IsNullOrEmpty(searchViewModel.Comment)){
var helper = _context.PurchaseOrderComments.Where(x => x.CommentText.Contains(searchViewModel.Comment));
var mid = po.Join(helper, r => r.PurchaseOrderID, u => u.PurchaseOrderID, (r, u) =>
new
{
PurchaseOrderID = r.PurchaseOrderID,
PurchaseOrderNumber = r.PurchaseOrderNumber,
VendorID = r.VendorID,
ContractNumber = r.ContractNumber,
BuyerUserID = r.BuyerUserID
});
po = mid.Select(x => new PurchaseOrder
{
PurchaseOrderID = x.PurchaseOrderID,
PurchaseOrderNumber = x.PurchaseOrderNumber,
VendorID = x.VendorID,
ContractNumber = x.ContractNumber,
BuyerUserID = x.BuyerUserID
});
}
在每个块之后,将 po 传递给下一个搜索参数。但是,正如您可能猜到的,我的程序抱怨我无法在 mid 的 Select 语句中构建复杂类型。我还尝试从 mid 的内容构建 PurchaseOrder 对象,将它们插入到新的 PurchaseOrders 列表中,并将该列表转换为可查询以分配给 po 以传递到下一个块。但是,这会将 po 的数据类型从 System.Data.Object.ObjectSet 更改为 System.Collections.Generic.List,然后在我下次尝试使用 foreach 遍历它时抛出 InvalidOperationException。
所以我的问题是,我的方法是否有任何明显的错误,或者对解决问题的其他方法有什么建议?非常感谢您的帮助。
【问题讨论】:
-
不支持投影到映射的实体类型。
标签: asp.net-mvc linq entity-framework