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();
我正在尝试将查询从原始 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();