gpt4 book ai didi

entity-framework - EF Left 在两个属性上加入一个表并结合一个 case 语句

转载 作者:行者123 更新时间:2023-12-05 00:01:49 25 4
gpt4 key购买 nike

我正在尝试为一个数据库编写一个查询,该查询将把一个表连接到一个查找表,结果将根据 case 语句返回。

在普通 SQL 中,查询将如下所示:

SELECT chis_id, chis_detail, cilt.mhcatID, cilt.mhtID, 'TheFileName' =
CASE
WHEN cilt.mhcatID IS NOT NULL AND cilt.mhtID IS NOT NULL THEN chis_linked_filename
END
FROM chis
LEFT JOIN cilt on cilt.mhcatID = chis.mhcat_id AND cilt.mhtID = chis.mht_id
WHERE cch_id = 50
chis是被查询的表, cilt是一个查找表,因此不包含与 chis 的任何外键关系(chis 分别通过 mhtID 和 mhcatID 具有到 mht 和 mhcat 表的现有 FK)。

该查询将用于返回记录的历史更新列表。如果连接到 cilt 查找表成功,这意味着查询的调用者将有权查看历史更新的任何关联文件的文件名。

虽然在我的研究期间,我在这里发现了各种关于如何在 Linq 中执行 case 语句和左连接到实体查询的帖子,但我无法弄清楚如何在两个不同的领域进行连接。这可能吗?

最佳答案

您需要加入具有匹配字段名称的匿名类型,如下所示:

var query = from x in context.Table1
join y in context.Table2
on new { x.Field1, x.Field2 } equals new { y.Field1, y.Field2 }
select {...};

使用额外 from 的完整工作示例而不是 join看起来像这样:
var query = from chis in context.Chis
from clit in context.Clit
.Where(x => x.mhcatID = chis.mhcat_id)
.Where(x => x.mhtID = chis.mht_id)
.DefaultIfEmpty()
select new
{
chis.id,
chis.detail,
cilt.mhcatID,
cilt.mhtID,
TheFileName = (cilt.mhcatID != null && cilt.mhtID != null) ? chis.linked_filename : null
};

关于entity-framework - EF Left 在两个属性上加入一个表并结合一个 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804302/

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