ef core select 表中具有匹配字段的记录

ef core select records from tableA with matching fields in tableB

我正在尝试将查询从原始 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 的 none,所以它应该类似于

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;

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

您可以像这样在查询中简单地使用 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();

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

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();