0

希望那里的 EF/linq 专家可以帮助我完成一个非常简单的查询(就像在 SQL 中一样)。这是我正在尝试做的伪代码:

问题一:

 var query1 = FROM tableA in Models.TableAs
              select tableA

查询 B:

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

我的实际查询要复杂得多,不能用简单的连接来表示。我需要实际运行第一个查询以获取用于在第二个查询中过滤值的值列表。有人有想法么?

谢谢!

4

3 回答 3

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);
于 2013-04-29T14:48:49.643 回答
0

您从 Entity Framework 的错误方向来看这个问题。

在 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
于 2013-04-29T14:45:01.267 回答
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;
于 2013-04-29T14:58:38.997 回答