gpt4 book ai didi

c# - LINQ 比较 2 个表(有点像 SQL 除了?)

转载 作者:行者123 更新时间:2023-12-01 22:46:40 27 4
gpt4 key购买 nike

我目前有 2 个表:

表 1,包含以下列:

  • Id、TypeId、VersionId、AnotherColumn1、AnotherColumn2、AnotherColumn3

Table2,包含以下列:

  • Id、TypeId、VersionId、DifferentColumn1、DifferentColumn2

这两个表唯一的共同点是 TypeIdVersionId

我正在尝试从 Table1 AS LONG 中 TypeIdVersionId em> 因为那个特定的 **Type Id + VersionId 组合 ** 不在表 2 中。

我尝试了以下方法:

var result1 = this.Table2
.Select(k => new { TypeId = k.TypeId, VersionId = k.VersionId })
.ToArray() // Trying to first select all possible TypeId + VersionId combinations from Table2

var finalResult = this.Table1
. // This is where I am lost, should I use a `.Except`?, some kind of `.Where`?

最佳答案

这应该可以通过使用 DefaultIfEmpty 对左外连接进行分组:

var results = context.Table1
.GroupJoin(context.Table2,
t1 => new {t1.TypeId, t1.VersionId},
t2 => new {t2.TypeId, t2.VersionId},
(t1, t2) => new { Values = new {t1.TypeId, t1.VersionId}, Table2s = t2.DefaultIfEmpty().Where(x => x != null) })
.Where(g => !g.Table2s.Any())
.Select(g => g.Values)
.ToList();

这可能看起来有点复杂,但实际上我们在 TypeId 和 VersionId 上的表之间进行了外部连接。在获取该连接的分组结果时,我们必须告诉 EF 排除 Table2 为 #null 的任何情况,否则我们将获得一个包含 1 个 #null 元素的集合。 (可能有一个更优化的方法来让它工作,但上面的方法确实有效)这是按请求的值(表 1 中的 TypeId 和 VersionId)的组合分组的。从那里它只是过滤掉没有 Table2 记录的结果,并从分组中选择“键”,这是我们想要的值。

关于c# - LINQ 比较 2 个表(有点像 SQL 除了?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75177696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com