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

C# Linq to SQL-从两个表返回记录详细信息,c#,sql-server,linq-to-sql,join,C#,Sql Server,Linq To Sql,Join,我在linq查询中遇到了一些问题。这是一个简单的问题,但我不确定最好的解决方法是什么。我有两个表(我只显示相关字段),分别是Artist和Song: ARTIST - int ArtistID (pk) varchar Name SONG - int SongID (pk) uniqueidentifier UserID (To lookup songs the user has added to their account) int Artist

我在linq查询中遇到了一些问题。这是一个简单的问题,但我不确定最好的解决方法是什么。我有两个表(我只显示相关字段),分别是
Artist
Song

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中创建一个方法,该方法检索用户的所有歌曲(给定用户ID),并将其显示在一个中继器中,该中继器将艺术家名称与歌曲相结合(因此最终输出将是
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();
}

编辑:我不知道为什么使用<代码> Stutt考虑使用<代码>类< /C> >,但是真正的问题是因为你有公共字段,而不是公共属性。读卡器仅绑定到公共属性,因此会出现错误。将结构更改为

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

有什么原因不能返回与自定义结构相反的IEnumerable字符串吗

var query = from p2 in db.SONG
                    where p2.UserID == givenUserID
                    join p in db.ARTIST
                    on p2.ArtistID equals p.ArtistID
                    select String.Format("{0} - {1}", p.Name, p2.songName)  

        return query.ToList();

我可以使用IList作为方法的返回类型,在调用端我使用动态类型,如果可以循环结果,它就像魔术一样工作

    public static IList GetHistory(DateTime time, string contact = "")
    {
        using (Entities entities = new Entities())
        {
            //....your code
            return convs.ToList();
        }
    }
现在你可以这样称呼它:

        dynamic sa = DataStore.GetHistory(DateTime.Now, "satish");
        foreach (var a in sa)
        {
            Console.WriteLine(a.ConvText);
        }

谢谢你的快速回复。我试图返回一个ToList(),但转发器抛出一个错误,指出
“数据绑定:'MyProj.DAL+ArtistSongStruct'不包含名为'ArtistName'的属性。
(我的转发器代码是
,我应该添加,我的DAL中的方法是:
公共静态列表GetUserLinks(Guid cUser)
public-struct-ArtistSongStruct{public-string-ArtistName;public-string-songName;};就是这样。谢谢,斯坦·R。!