C# Linq to SQL-从两个表返回记录详细信息
我在linq查询中遇到了一些问题。这是一个简单的问题,但我不确定最好的解决方法是什么。我有两个表(我只显示相关字段),分别是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
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。!