使用 LINQ 连接两个 table,同时还从第二个 table 返回空记录

Joining two tables with LINQ while also returning null records from the second table

我要加入 table、MessageImage。 table 看起来像这样:

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 绑定到需要 Image table 中的 Path 列的 ListView。我目前仅加入 returns 条带图片的消息。我如何 select 所有消息,但如果消息有一个 ImageID != null,然后为其分配一个值 Path?我想我应该更改此行:至少 on m.ImageID equals i.ImageID

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

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 : ""
    };