Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到SQL选择许多列_C#_Asp.net_Linq To Sql - Fatal编程技术网

C# Linq到SQL选择许多列

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)

我正在使用LINQtoSQL,我刚刚开始学习一些基础知识。我对select命令在许多表中的许多列有问题。我将选择的歌曲放入会话(包含songid),并在datagrid中显示songname、artistname、genrename

但它不起作用

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[]如果此答案解决了您的问题,则应通过单击复选标记将其标记为已接受。