c# - Linq to SQL - 从两个表返回记录详细信息

标签 c# sql-server linq-to-sql join

我在使用 linq 查询时遇到了一些问题。这是一个简单的问题,但我不确定解决它的最佳方法是什么。我有两个表(我只显示相关字段),名为 ArtistSong:

ARTIST - int ArtistID (pk)
         varchar Name

SONG - int SongID (pk)
       uniqueidentifier UserID (To lookup songs the user has added to their account)
       int ArtistID (foreign key to ArtistID in Artist table)
       varchar songName

我想做的是在我的 DAL 中创建一个方法,该方法检索所有用户的歌曲(给定 UserID)并将其显示在将艺术家姓名与歌曲结合在一起的中继器中(因此最终输出将是 ArtistName - songName)。我创建了这个查询:

            var query = from p2 in db.SONG
                        where p2.UserID == givenUserID
                        join p in db.ARTIST
                        on p2.ArtistID equals p.ArtistID
                        select new ArtistSongStruct
                        {
                            ArtistName = p.Name,
                            songName = p2.songName

                        };   

            return query;

这达到了我可以在我的业务层中调试并读取正确值的程度。但是,ArtistSongStruct 是我在 DAL 中专门为此方法创建的自定义结构。我不确定这是否是做事的好方法。其次,即使返回给业务层,我也无法让中继器显示实际值。它显示一个错误,声称没有名称为 ArtistName/songName 的属性。

根据 ArtistID 返回艺术家及其歌曲的最佳方式是什么? 感谢您的任何建议。我对 L2S 很陌生,所以这有点令人困惑。

最佳答案

您不应该返回查询,您应该尽快关闭与数据库的连接并返回查询的 ToList() 结果。

using(DataContext db = new DataContext())
{
        var query = from p2 in db.SONG
                    where p2.UserID == givenUserID
                    join p in db.ARTIST
                    on p2.ArtistID equals p.ArtistID
                    select new ArtistSongStruct
                    {
                        ArtistName = p.Name,
                        songName = p2.songName

                    };   

        return query.ToList();
}

编辑:我不确定你为什么使用 struct 考虑使用 class,但你真正的问题是因为你有公共(public)字段,而不是公共(public)属性。 Reader 仅绑定(bind)到公共(public)属性,因此会出现错误。将您的结构更改为。

    public struct ArtistSongStruct 
    {  
       public string ArtistName {get; set;}
       public string songName { get; set; } 
    }

关于c# - Linq to SQL - 从两个表返回记录详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2320694/

相关文章:

c# - 如何在条件下隐藏 Crystal Report 中的数据库字段

c# - 从字典中检索原始 key

c# - .Net/C# 说明

sql - 如何检查谁持有我想授予的锁?

Linq ToDictionary 未定义?

linq - LINQ to SQL EntitySet 中的抽象泄漏

c# - XAML 中作为资源的可见性

sql-server - 顺序执行 SQL Server 存储过程

c# - 如何编写 LINQ to SQL 查询来更新标签?