gpt4 book ai didi

c# - 使用 LINQ 连接两个表,同时还从第二个表返回空记录

转载 作者:太空狗 更新时间:2023-10-30 01:17:46 25 4
gpt4 key购买 nike

我有要加入的表 MessageImage。表格如下所示:

Message(MessageID, TimeStamp, Text, RoomID, ImageID, UserID)
Image(ImageID, Path, Type, UserID)

并非所有消息都有 ImageID。这是我当前的加入:

List<Message> messages = Message.GetAll();
List<Image> images = Image.GetAll();

var resultTable = from m in messages
join i in images
on m.ImageID equals i.ImageID
select new
{
MessageID = m.MessageID,
TimeStamp = m.TimeStamp,
Text = m.Text,
RoomID = m.RoomID,
ImageID = m.ImageID,
UserID = m.UserID,
Path = i.Path // Nullable
};

然后我将 resultTable 绑定(bind)到 ListView,它需要 Image 表中的 Path 列。我当前的加入仅返回带有图像的消息。我将如何选择所有消息,但如果消息具有 ImageID != null,则为其分配一个 Path 值?我想我应该更改此行:on m.ImageID equals i.ImageID at minimum.

最佳答案

您当前正在进行内部联接,但您可以使用 DefaultIfEmpty() to create a left outer join .这也将返回空记录。

var resultTable = from m in messages 
join i in images on m.ImageID equals i.ImageID into imgJoin
from img in imgJoin.DefaultIfEmpty()
select new
{
MessageID = m.MessageID,
TimeStamp = m.TimeStamp,
Text = m.Text,
RoomID = m.RoomID,
ImageID = m.ImageID,
UserID = m.UserID,
Path = img != null ? img.Path : ""
};

关于c# - 使用 LINQ 连接两个表,同时还从第二个表返回空记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541562/

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