gpt4 book ai didi

c# - LINQ 和 SQL 中看似等效的查询返回不同的结果

转载 作者:太空狗 更新时间:2023-10-30 00:39:43 26 4
gpt4 key购买 nike

<分区>

不确定为什么它被链接为一个骗局。问题是完全不同的。答案是不同的。不确定要更改什么。如果有人看到我遗漏了什么,请告诉我...

我使用这两个查询得到的结果数量不同。在分析了几个小时之后,我不得不认输,承认我无法发现重要性的差异。由于我的方法库已用完,我正在寻求帮助。

林奇

List<Uno> result = context.Unos
.Join(context.Duos, uno => uno.CommonId, duo => duo.CommonId,
(uno, duo) => new { Uno = uno, Duo = duo })
.Where(item => item.Uno.Amount > 0
&& item.Duo.Type == 2)
.Select(item => item.Uno)
.ToList();

SQL

select * from Uno as u
join Duo as d on d.CommonId = u.CommonId
where u.Amount > 0
and d.Type = 2

第一个问题是以上两个陈述是否确实等价,或者我是否遗漏了什么。第二个问题是我遗漏了什么(如果有的话)或如何排除故障(如果没有)。

  1. 针对同一个数据库进行调用。
  2. 结果数量相差很大(142 和 1437)。
  3. 为内部联接获取相同的结果集。
  4. UnoDuo 都是 View ,而不是表格。

我还能验证什么?

编辑

在社区的大力支持下,我们确定 LINQ 查询可以通过以下命令进行 SQL 化。

var wtd = context.Unos
.Join(context.Duos, uno => uno.CommonId, duo => duo.CommonId,
(uno, duo) => new { Uno = uno, Duo = duo })
.Where(item => item.Uno.Amount > 0
&& item.Duo.Type == 2)
.Select(item => item.Uno)
.ToString();

疯狂的是,在 SQL Manager 中执行 that 字符串会产生 142 个结果(就像上面示例中的查询一样,SQL 版本)并且与它的差别很小。但是,执行 LINQ 查询本身会产生 1437 个结果。我太困惑了,甚至都哭不出来......

"SELECT \r\n [Extent1].[CommonId] AS [CommonId], \r\n [Extent1].[X] AS [X]\r\n FROM (SELECT \n [Uno].[CommonId] AS [CommonId], \n [Uno].[X] AS [X]\n FROM [Finance].[Uno] AS [Uno]) AS [Extent1]\r\n INNER JOIN (SELECT \n [Duo].[CommonId] AS [CommonId], \n [Duo].[Y] AS [Y], \n [Duo].[Z] AS [Z], \n [Duo].[Type] AS [Type], \n [Duo].[U] AS [U], \n [Duo].[V] AS [V]\n FROM [Finance].[Duo] AS [Duo]) AS [Extent2] ON [Extent1].[CommonId] = [Extent2].[CommonId]\r\n WHERE ([Extent1].[X] > cast(0 as decimal(18))) AND ([Extent2].[Type] = @p__linq__0)"

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