C# Linq到SQL选择许多列
我正在使用LINQtoSQL,我刚刚开始学习一些基础知识。我对select命令在许多表中的许多列有问题。我将选择的歌曲放入会话(包含songid),并在datagrid中显示songname、artistname、genrename 但它不起作用C# Linq到SQL选择许多列,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我正在使用LINQtoSQL,我刚刚开始学习一些基础知识。我对select命令在许多表中的许多列有问题。我将选择的歌曲放入会话(包含songid),并在datagrid中显示songname、artistname、genrename 但它不起作用 ArrayList SelectedSongs = (ArrayList)Session["SelectedSongs"]; string songIds = ""; foreach (int id in SelectedSongs)
ArrayList SelectedSongs = (ArrayList)Session["SelectedSongs"];
string songIds = "";
foreach (int id in SelectedSongs)
songIds += id + ", ";
var query = from s in sa.Songs
from ar in sa.Artists
from g in sa.Genres
where s.SongID in (songIds)
select new { s.SongID, s.SongName, ar.ArtistName, g.GenreName };
dgSongs.DataSource = query;
谁能帮我解决这个问题。
谢谢。似乎您正在尝试加入多个表。我建议大家看一下Join部分。祝你好运 我相信您希望SongID是int[]而不是ID的csv。此语法不正确Linq:
where s.SongID in (songIds)
Linq等价于SQL的,其中在中使用Contains()
。你必须扭转陈述,从以下列表开始:
where songIds.Contains(s.SongID)
使用LINQtoSQL时,应始终使用导航属性,而不是显式联接。如果表之间有适当的外键,则会自动创建这些属性。当导航属性和songIDs
更改为int[]
时,您的查询应该如下所示:
int[] songIDs = ((ArrayList)Session["SelectedSongs"]).OfType<int>().ToArray();
var query = from s in sa.Songs
where songIDs.Contains(s.SongID)
select new
{
s.SongID,
s.SongName,
s.Artist.ArtistName,
s.Genre.GenreName
};
int[]songIDs=((ArrayList)会话[“SelectedSongs”])。of type().ToArray();
var query=来自sa.Songs中的s
其中songIDs.Contains(s.SongID)
选择新的
{
s、 宋吉德,
s、 歌名,
s、 艺人名称,
s、 Genre.GenreName
};
错误消息:表达式术语“in”无效。看起来您缺少一些联接。我找到了一个很好的资源,你可以在JOINSongAlbumDBDataContext sa=new SongAlbumDBDataContext(connStr)下找到一些选项;无法将类型“System.Collections.Genric.List”隐式转换为int[]如果此答案解决了您的问题,则应通过单击复选标记将其标记为已接受。