gpt4 book ai didi

c# - Entity Framework + Linq LEFT JOIN 使用 where 子句?

转载 作者:行者123 更新时间:2023-11-29 01:21:36 24 4
gpt4 key购买 nike

我将 Linq 与 Entity Framework 5 结合使用并使用查询语法(我想,请更正我的术语)。我有一张参与者表,我想将他们的研究 ID 号与一条记录的 SMS 消息相关联,消息中的“收件人”或“发件人”号码与参与者的电话号码相匹配。此外,我希望从(或发送到)未知号码的消息也显示在列表中,在这种情况下,研究 ID 号将为空。

这是 LEFT JOIN 的工作原始查询(如果重要,使用 MySQL 数据库):

SELECT
messages._id, participants.study_id_number, messages.ts,
messages.from_phone, messages.to_phone, messages.body
FROM messages LEFT JOIN
participants ON ( (participants.phone_number = messages.to_phone)
|| (participants.phone_number = messages.from_phone))
ORDER BY messages.ts DESC;

这是我到目前为止在 Linq 中所做的工作,但它是一个内部连接:

var loggedMessages = from pp in theDb.participants
let phone = pp.phone_number
from mm in theDb.messages
let fromPhone = mm.from_phone
let toPhone = mm.to_phone
where ((phone == fromPhone) || (phone == toPhone))

orderby mm.ts descending
select new MessageLogEntry()
{
ParticipantId = pp.study_id_number,
TimeStamp = mm.ts,
FromPhone = fromPhone,
ToPhone = toPhone,
Body = mm.body
};

我是这方面的新手,所以我很乐意看到有关 Linq 查询的教程链接,但是我需要添加什么才能使其成为 LEFT JOIN?

编辑:请在下面查看我自己的回答。

最佳答案

您需要添加 DefaultIfEmpty() 使其成为左连接。

检查这个:

var loggedMessages = from pp in theDb.participants
join mm in theDb.messages
on pp.phone_number equals mm.to_phone ||
pp.phone_number equals mm.from_phone
into joinedmm
from pm in joinedmm.DefaultIfEmpty()
orderby mm.ts descending
select new MessageLogEntry()
{
ParticipantId = pp.study_id_number,
TimeStamp = pm.ts,
FromPhone = fromPhone,
ToPhone = toPhone,
Body = pm.body
};

关于c# - Entity Framework + Linq LEFT JOIN 使用 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21805676/

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