2017-06-14 68 views
1

我想知道如何在LINQ中定义一个相关子查询来访问我数据库中的两个表。尝试在Linq中定义子查询时遇到问题

我打算做的是在LINQ

select * from Value 
where CyberEntityID IN (select CyberEntityID from CyberEntity where 
         datetimevalue >= '2017-05-04 17:11:32.960' and 
         datetimevalue <= '2017-05-04 17:11:33.035') 

在我的代码创建下面的查询我有以下查询

var query = dc.Values.Where(h => h.CyberEntityID == dc.CyberEntities 
           .Where(d => d.datetimevalue >= sd && d.datetimevalue <= ed) 
           .Select(d => d.CyberEntityID)).ToList(); 

但是我收到一个错误说

运算符==不能应用于int和IQueryable类型

我在做什么错?

回答

1

Where方法返回的CyberEntityIDIQueryable不能与h.CyberEntityID比拟的,所以你需要它返回序列第一元素FirsOrDefaultSelect

.Select(d => d.CyberEntityID).FirstOrDefault() 

或者使用Contains方法:

.Where(h => dc.CyberEntities.Where(d => d.datetimevalue >= sd && d.datetimevalue <= ed) 
          .Select(d => d.CyberEntityID).Contains(h.CyberEntityID)) 
+0

Can h e有一个'First()'而不是? –

+0

这不仅仅是从Cyber​​Entity表中返回一行吗?在我的数据库中,我有3行用于示例中给出的日期范围。对于这3行中的每一行,我都想选择所有相关的值(在我的例子中为50 * 3)。我想过使用FirstOrDefault(),但我不知道我是否会得到150或50个值(在这个例子中)。 –

+0

@DiogoMartinho在这种情况下使用'Contains'方法。检查我更新的答案。 –