Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从MVC中LINQ联接的结果创建实体对象/可查询对象时出现问题_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

Asp.net mvc 从MVC中LINQ联接的结果创建实体对象/可查询对象时出现问题

Asp.net mvc 从MVC中LINQ联接的结果创建实体对象/可查询对象时出现问题,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我试图为需要使用实体框架访问相关表信息的数据库表编写一个搜索函数。但是,在对父表和相关表进行联接之后,从初始查询中获取数据时遇到了问题。我的代码目前看起来像这样。我初始化我的可查询对象 IQueryable<PurchaseOrder> po = _context.PurchaseOrders; 在每个块之后,po被传递到下一个搜索参数。然而,正如您可能猜到的,我的程序抱怨我无法在mid的Select语句中构建复杂类型。我还尝试从mid的内容构建PurchaseOrder对象,将它

我试图为需要使用实体框架访问相关表信息的数据库表编写一个搜索函数。但是,在对父表和相关表进行联接之后,从初始查询中获取数据时遇到了问题。我的代码目前看起来像这样。我初始化我的可查询对象

IQueryable<PurchaseOrder> po = _context.PurchaseOrders;
在每个块之后,po被传递到下一个搜索参数。然而,正如您可能猜到的,我的程序抱怨我无法在mid的Select语句中构建复杂类型。我还尝试从mid的内容构建PurchaseOrder对象,将它们插入到新的PurchaseOrder列表中,并将该列表转换为可查询项,以分配给po以传递到下一个块。但是,这会将po的数据类型从System.data.Object.ObjectSet更改为System.Collections.Generic.List,然后在我下次尝试使用foreach迭代时抛出InvalidOperationException


所以我的问题是,我的方法中有没有明显的错误,或者有没有其他解决问题的方法的建议?非常感谢您的帮助。

我想您让事情变得比实际需要的更复杂了。如果我明白你想做什么,你应该可以做这样的事情:

if (!String.IsNullOrEmpty(searchViewModel.Comment)){
  po = po.Where(
     o => o.PurchaseOrderComments.Any(
       c => c.CommentText.Contains(searchViewModel.Comment)));
}

StriplingWarrior的解决方案是最好的方法。如果您的
PurchaseOrder
类确实没有
PurchaseOrderComments
的导航集合(这将迫使您使用联接),那么以下内容应该可以使用,并且与双投影相比更简单:

po=po.Join(helper, r => r.PurchaseOrderID, u => u.PurchaseOrderID, (r, u) => r);

不支持投影到映射的实体类型。
po=po.Join(helper, r => r.PurchaseOrderID, u => u.PurchaseOrderID, (r, u) => r);