是否可以使用LinQ编写子查询?

时间:2015-01-03 16:31:54

标签: linq entity-framework subquery

假设我有这两个表:

  • TableA(IDTableA,...)
  • TableB(IDTableB,IDTableA,...)

我想要像LinQ这样的子查询:

select * 
from MytableA 
where IDTableA = (select IDTable A From TableB where IDTableB = 123);

我正在尝试这样的事情:

MytableA myTableAEntity = dbContext.MytableA
.Where(x=>x.IDTableA == dbContext.MytableB.Where(y=>y.IDTableB == 123).SingleOrDefault();

但是我有一个错误,表示我无法将IQueryable<long>投射到长片中。

是否可以做类似的事情?

非常感谢。

1 个答案:

答案 0 :(得分:2)

在您的第一个Where子句中,您正在测试不兼容类型longMytableB的相等性。

在比较之前,您必须在子查询中选择IDTableA

IEnumerable<MytableA> matchedTableAs = dbContext.MytableA
    .Where(x=>x.IDTableA == dbContext.MytableB.Where(y=>y.IDTableB == 123)
        .Select(b => b.IDTableA).SingleOrDefault());