希望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)
我的实际查询要复杂得多,无法通过简单的连接来表示。我需要实际运行第一个查询,基本上获取一个值列表,用于在第二个查询中过滤掉值。有人有什么想法吗?
谢谢!
答案 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;