Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 具有EF导航属性的LINQ连接_Asp.net Mvc_Linq_Entity Framework - Fatal编程技术网

Asp.net mvc 具有EF导航属性的LINQ连接

Asp.net mvc 具有EF导航属性的LINQ连接,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我已经阅读了很多关于如何在LINQJOIN语句中使用实体框架导航属性的内容,但仍然有一些问题。我可以使它在Where子句中工作,但不能作为联接 如果我的交叉引用表存在于EF中,而不仅仅是一个导航属性,那么我的LINQ将是这样的: var status = (from a in context.Beamtime_Request_Statuses join b in context.Proposal_Types_Beamtime_Request_Statuses on a

我已经阅读了很多关于如何在LINQJOIN语句中使用实体框架导航属性的内容,但仍然有一些问题。我可以使它在Where子句中工作,但不能作为联接

如果我的交叉引用表存在于EF中,而不仅仅是一个导航属性,那么我的LINQ将是这样的:

var status = (from a in context.Beamtime_Request_Statuses
              join b in context.Proposal_Types_Beamtime_Request_Statuses on a.Status equals b.Beamtime_Request_Status
              where b.Proposal_Type_ID == proposalTypeID && a.Order > currentStatusOrder
              orderby a.Order
              select a.Status).FirstOrDefault();
因此,问题在于表Proposal\u Types\u Beamtime\u Request\u Status并没有成为一个实体,而是一个导航属性,因为该表只包含Proposal\u Type\u ID和Beamtime\u Request\u Status两列,这两列都是该表中其他表的主键和外键


如果有人能告诉我如何使用适当的表示法将建议、类型、时间、请求、状态作为导航属性来编写LINQ语句,我将不胜感激。

您与纯连接表有多对多关联(只有两个外键,都包含表的主键)。默认情况下,实体框架不会将此类表映射到类。您可以不使用这种方式查询多对多关联,如下所示:

from a in context.Beamtime_Request_Statuses
where a.Proposal_Types.Any(pt => pt.Proposal_Type_ID == proposalTypeID)
   && a.Order ... (rest of the query)
(假设
Beamtime\u Request\u Status
有一个属性
Proposal\u Types
,默认情况下EF会创建该属性。)


或者可以强制EF将表映射为类。应该有效的方法。您还可以向连接表中添加一列,从数据库中更新模型,然后再次删除该列(如果该列恰好是一个有用的列,则将其保留在那里).

因此
Beamtime\u Request\u Status
有一个属性
提案类型
?是的,Beamtime\u Request\u Status有一个提案类型的导航属性,提案类型有一个Beamtime\u Request\u Status的导航属性。谢谢!因此where子句实质上复制了如果交叉引用表作为一个实体实际可用时联接将执行的操作。