1

我正在尝试将查询从原始 sql 转换为 EF Core 2 中的 linq 语句

查询是这样的

SELECT * FROM TableA
WHERE FieldA = ConditionA
AND FieldB IN (SELECT FieldC FROM TableB WHERE FieldD = ConditionB)

FieldA 和 FieldB 来自 TableA,FieldC 和 FieldD 来自 TableB

我需要 TableA 中的所有字段,而 TableB 中没有返回,所以它应该类似于

return Context.TableA
    .Where(x => x.FieldA == ConditionA)
    .[ some code here ]
    .ToList()

我目前的解决方案是获得两个不同的结果集并将它们加入代码中,就像这样

var listA = Context.TableA
    .Where(x => x.FieldA == ConditionA).ToList();
var listB = Context.TableB
    .Where(x => x.FieldD == ConditionB).Select(x => x.FieldC).ToList();
listA.RemoveAll(x => !listB.Contains(x.FieldB);
return listA;

我希望它有效,我仍然需要对其进行测试,但我正在寻找更好的解决方案(如果有的话)

4

2 回答 2

1

您可以Contains像这样在查询中简单地使用函数:

var ids = Context.TableB
     .Where(p => p.FieldD == conditionD)
     .Select(p => p.FieldC);
var result = Context.TableA
     .Where(p => ids.Contains(p.FieldB))
     .ToList();
于 2017-12-06T08:56:48.133 回答
0

这是一个需要应用的简单连接 -

var result = (from a in Context.TableA.Where(x => x.FieldA == ConditionA )
         join b in Context.TableB.Where(x => x.FieldD == ConditionB) on a.FieldB equals b.FieldC
         select new {a}
         ).ToList();
于 2017-12-06T09:31:55.493 回答