在LINQ中使用强类型对象执行JOIN

本文关键字:对象 执行 JOIN 强类型 LINQ | 更新日期: 2023-09-27 17:50:42

我有两个用实体数据模型生成的对象。对象如下所示:

public class Song
{
  public int ID { get; set; }
  public string Title { get; set; }
  public double Duration { get; set; }
}
public class AlbumSongLookup
{
  public int ID { get; set; }
  public int SongID { get; set; }
  public int AlbumID { get; set; }
}

我需要使用LINQ获取专辑的Song对象。我有相册ID。目前,我正在尝试:

int albumID = GetAlbumID();
var results = from lookup in context.AlbumSongLookups
              where lookup.AlbumID=albumID
              select lookup;

我知道我需要做一个连接。但我不确定的是,我如何得到的结果是宋对象与这个LINQ查询?

谢谢!

在LINQ中使用强类型对象执行JOIN

这个查询是否返回您所期望的?

var results = from lookup in context.AlbumSongLookups
              join song in context.Songs on lookup.SongID equals song.ID
              where lookup.AlbumID == albumID
              select song;

我假设存在上下文。歌曲

这样不行吗?

from lookup in context.AlbumSongLookups
from songs in context.Song
where lookup.SongID == songs.ID && lookup.SongID == albumID
select songs

你可以在你的"Song"实体中添加一个"Navigation Property",这样,你就可以直接访问特定专辑中相应的歌曲。实体框架将为您完成繁重的工作。

在您的示例中,它返回查找的集合,您需要做的是查找与它们相对应的Song对象。这可以使用:

int albumID = GetAlbumID();
var results = from lookup in context.AlbumSongLookups
              where lookup.AlbumID=albumID
              select context.Songs.SingleOrDefault(s=>s.SongID==lookup.SongID);

应该这样做:

int albumID = GetAlbumID();
var songIDs = from lookup in contenxt.AlbumSongLookups
              where lookup.AlbumID == albumID
              select lookup.SongID;
var results = from song in context.Songs
              where song.SongID in SongIDs
              select song;