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

康拉德·维特尔斯滕

不知道为什么将其链接为骗子。问题是不同的。答案是不同的。不知道要更改什么。如果有人看到我想念的东西,请告诉我...

使用这两个查询,我得到的结果数量不同。在分析了几个小时之后,我需要投入毛巾,承认我无法发现重要性的差异。由于我的方法库已空荡荡,因此我需要帮助。

LINQ

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. 无论乌诺双核的看法,并不表。

我还能验证什么?

编辑

在社区的大力支持下,我们确定可以通过以下命令对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中执行字符串会产生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 [财务]。[Uno] AS [Uno])AS [Extent1] \ r \ n内部联接(选择\ 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其中([Extent1]。[X]> cast(0为十进制(18)))AND([Extent2]。[类型] = @ p__linq__0)”

格特·阿诺德

在Entity Framework中映射视图时,经常会发生这种情况。与常规数据库表不同,视图通常没有明显唯一的键值。当EF遇到具有相同主键值的行时,它仅复制属于它已经知道的键的行。在联接中,这可能会导致EF产生更多的子记录,因为该第一个已知行的子记录可能比实际数据库的行更多。

解决方法是确保视图具有唯一标识行的字段(或字段组合)。而且,当然,在EF中,应将此映射为(可能是复合的)主键。

我不知道为什么EF会显示这种行为。我认为它应该有可能引发使重复实体具体化的异常。这种“功能”总是引起很多混乱。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此 Linq 查询返回的结果与 SQL 等效项不同?

来自分类Dev

两个(在我看来)等效的SQL查询返回不同的结果

来自分类Dev

查询和存储过程返回不同的结果

来自分类Dev

DB问题在轨道?Rails查询和SQL查询返回不同的结果(default_scope的错误?)

来自分类Dev

返回LINQ查询结果

来自分类Dev

Linq和SQL之间的结果不同

来自分类Dev

SQL查询和ActiveRecord.find_by_sql如何返回不同的结果?

来自分类Dev

结合两个仅返回结果不同的LINQ查询

来自分类Dev

Linq to SQL从查询返回多个计数而不返回正确的结果

来自分类Dev

LINQ Join和Sum查询返回重复的结果

来自分类Dev

无法从查询返回linq结果

来自分类Dev

SQL:为什么这些查询返回不同的结果?

来自分类Dev

c#Linq和SQL之间的不同结果

来自分类Dev

括号和引号被注入到 SQL 查询的返回结果中

来自分类Dev

返回查询结果和行数

来自分类Dev

针对相同的Entity Framework DbSet的两个不同的LINQ查询,均返回相同的结果

来自分类Dev

SQL查询返回错误结果

来自分类Dev

SQL查询返回错误的结果

来自分类Dev

SQL 查询返回多个结果

来自分类Dev

两个看似相同的数据库如何返回按不同列排序的结果?

来自分类Dev

原始sql查询和使用活动记录查询的查询写法给出了不同的结果

来自分类Dev

相同的查询,getResult与getArrayResult返回不同的结果

来自分类Dev

Hibernate返回结果是不同的直接查询

来自分类Dev

为什么mysql查询返回不同的结果?

来自分类Dev

相同的查询返回不同的结果(MySQL Group By)

来自分类Dev

solrj 对不同的查询返回相同的结果

来自分类Dev

等效的memcpy结果不同?

来自分类Dev

使用存储值和实际数字进行计算时,mysql查询返回不同的结果

来自分类Dev

jQuery和JS等效功能产生不同的结果

Related 相关文章

  1. 1

    为什么此 Linq 查询返回的结果与 SQL 等效项不同?

  2. 2

    两个(在我看来)等效的SQL查询返回不同的结果

  3. 3

    查询和存储过程返回不同的结果

  4. 4

    DB问题在轨道?Rails查询和SQL查询返回不同的结果(default_scope的错误?)

  5. 5

    返回LINQ查询结果

  6. 6

    Linq和SQL之间的结果不同

  7. 7

    SQL查询和ActiveRecord.find_by_sql如何返回不同的结果?

  8. 8

    结合两个仅返回结果不同的LINQ查询

  9. 9

    Linq to SQL从查询返回多个计数而不返回正确的结果

  10. 10

    LINQ Join和Sum查询返回重复的结果

  11. 11

    无法从查询返回linq结果

  12. 12

    SQL:为什么这些查询返回不同的结果?

  13. 13

    c#Linq和SQL之间的不同结果

  14. 14

    括号和引号被注入到 SQL 查询的返回结果中

  15. 15

    返回查询结果和行数

  16. 16

    针对相同的Entity Framework DbSet的两个不同的LINQ查询,均返回相同的结果

  17. 17

    SQL查询返回错误结果

  18. 18

    SQL查询返回错误的结果

  19. 19

    SQL 查询返回多个结果

  20. 20

    两个看似相同的数据库如何返回按不同列排序的结果?

  21. 21

    原始sql查询和使用活动记录查询的查询写法给出了不同的结果

  22. 22

    相同的查询,getResult与getArrayResult返回不同的结果

  23. 23

    Hibernate返回结果是不同的直接查询

  24. 24

    为什么mysql查询返回不同的结果?

  25. 25

    相同的查询返回不同的结果(MySQL Group By)

  26. 26

    solrj 对不同的查询返回相同的结果

  27. 27

    等效的memcpy结果不同?

  28. 28

    使用存储值和实际数字进行计算时,mysql查询返回不同的结果

  29. 29

    jQuery和JS等效功能产生不同的结果

热门标签

归档