EF子查询(第一个查询中的列包含另一个列表中的值)

时间:2013-04-29 14:40:38

标签: entity-framework

希望EF / linq guru可以帮助我解决一个非常简单的查询(就像在SQL中一样)。这是我想要做的伪代码:

QUERY A:

 var query1 = FROM tableA in Models.TableAs
              select tableA

QUERY B:

var query2 = FROM tableB in Models.TableBs
             WHERE tableB.ColumnA IN (query1.results.columnB)

我的实际查询要复杂得多,无法通过简单的连接来表示。我需要实际运行第一个查询,基本上获取一个值列表,用于在第二个查询中过滤掉值。有人有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

这样的事可能

var query1 = from tableA in Models.TableAs
          select tableA

var query2 = from tableB in Models.TableBs
         where query1.Any(ta=>tableB.ColumnA==ta.ColumnB);

答案 1 :(得分:0)

您正在从实体框架的错误方向看这个。

在SQL中,你会写下这样的东西:

SELECT * FROM TABLEA
WHERE TABLEA.COLUMNA IN (TABLEB.COLUMNB)

使用IN。

如果我们有这样的模型:

public class TableA
{
    public TableBEntity TableB {get;set;}
}

public class TableB
{
    public IEnumerable<TableAEntity> TableA {get;set;}
}

在EF中,尝试这种方式:

from myvar in context.TableB select myvar.TableA

答案 2 :(得分:0)

我相信jure的查询或者这个查询会得到相同的结果,但我认为它们会生成不同的SQL,其中一个可能比另一个更快。你可以试着看看哪一个能提供更好的性能。

var query1 = from tableA in Models.TableAs
          select tableA.columnB;

var query2 = from tableB in Models.TableBs
         where query1.Contains(tableB.ColumnA)
         select tableB;