gpt4 book ai didi

entity-framework - Entity Framework 连接可为空的连接列

转载 作者:行者123 更新时间:2023-12-01 02:51:02 24 4
gpt4 key购买 nike

我的 Devart Entity Framework 提供程序将以下 linq 用于实体。

from p in context.BEAT_CONTACT
join cl in context.COMPASS_LOCATIONS
on p.GAZETEER_KEY equals cl.GAZETTEER_KEY
//on new { bcdid = p.GAZETEER_KEY.Value }
//equals new { bcdid = cl.GAZETTEER_KEY.Value }
into myRandomlj
from rr in myRandomlj.DefaultIfEmpty()

注意:连接列在数据库中是可以为空的类型,因此是十进制?在 C# 中

生成的 SQL 是:
FROM   NP_TEST.BEAT_CONTACT "Extent1"
LEFT OUTER JOIN NOTTS_DW_OWNER.COMPASS_LOCATIONS "Extent2"
ON ("Extent1".GAZETEER_KEY = "Extent2".GAZETTEER_KEY)
* OR (("Extent1".GAZETEER_KEY IS NULL)
* AND ("Extent2".GAZETTEER_KEY IS NULL))

带星号的 (*) OR 和 AND 为我的 sql 的执行增加了额外的秒数。当语句被放入 toad (oracle devart ef provider btw) 时,将带星号的项目重新列出,sql 显然运行得更快。

我的问题是:我的 linq to entity 是否有问题或遗漏了什么?还是 Devart EF 提供商的问题?

问题更新:
您好,作为这个问题的原始创建者,如果可能的话,我想尝试澄清一下这个问题。来自 LukLed 的评论 - “默认 Entity Framework 提供程序正常工作并且不会创建此类 SQL 条件。这不仅是错误的,而且还是一个巨大的性能打击者”。我主要关注“性能击球手”评论,这种打击是巨大的,尤其是当连接两侧的行数攀升时。我不得不使用 ExecuteStoreQuery<> 或 Sproc 来规避这种行为。这意味着没有 linq,我不得不戴上我的 sql 帽子才能完成工作。

最佳答案

非常好,按预期工作,额外的条件确保在两者都是 null 时加入由于null = null在 SQL 中不是真的

关于entity-framework - Entity Framework 连接可为空的连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994868/

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