LINQ加入多个表 - 没有结果

时间:2016-10-06 19:21:20

标签: c# sql-server entity-framework linq

我正在尝试使用LINQ来连接多个表,并检索分发方法的名称。我有一个SQL语句,我用它作为依据。

  select dt.NAME 
  from i_doc.dbo.document as d
  join i_doc.dbo.CONTACT as c
  on c.DOC_ID = d.DOC_ID 
  join i_doc.dbo.RECIPIENT as r
  on r.CONTACT_ID = c.CONTACT_ID 
  join i_doc.dbo.DISTRIBUTION_TYPE as dt
  on dt.DISTRIBUTION_TYPE_ID = r.DISTRIBUTION_TYPE_ID 
  where c.CONTACT_TYPE_ID = 2
  and r.DISTRIBUTION_TYPE_ID != 6
  and d.DOC_ID = 28757

此特定查询返回1项。但是,我没有返回任何LINQ代码。 LINQ代码如下。

var distributionMethod = (from d in _documentEntities.DOCUMENTs
                                  join c in _documentEntities.CONTACTs on d.DOC_ID equals c.DOC_ID
                                  join r in _documentEntities.RECIPIENTs on c.CONTACT_ID equals r.CONTACT_ID
                                  join dt in _documentEntities.DISTRIBUTION_TYPE on r.DISTRIBUTION_TYPE_ID equals dt.DISTRIBUTION_TYPE_ID
                                  where c.CONTACT_ID == 2
                                  && r.DISTRIBUTION_TYPE_ID != 6
                                  && d.DOC_ID == DocID
                                  select dt.NAME).ToList();

在尝试确定发生了什么时,我们简化了查询以测试连接是否正确,并测试了以下LINQ。

var test = (from dt in _documentEntities.DISTRIBUTION_TYPE           
                                  select dt.NAME).Take(100);

这个LINQ,var测试产生适当的值。

我的问题是:为什么我的distributionMethod LINQ查询没有返回任何内容,我该怎么做才能修复它?

谢谢

1 个答案:

答案 0 :(得分:1)

在您的LINQ查询中,您按c.CONTACT_ID进行过滤,但在SQL查询中,您按c.CONTACT_TYPE_ID进行过滤,这只是简单的拼写错误。