在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查询?
谢谢!
这个查询是否返回您所期望的?
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;