gpt4 book ai didi

c# - Linq-to-SQL 选择多列

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:31 27 4
gpt4 key购买 nike

我正在使用 Linq-to-SQL,并且我刚刚开始学习一些基础知识。我对许多表中的许多列的 select 命令有疑问。我给选入 session 的歌曲(包含歌曲 ID)并在数据网格中显示歌曲名称、艺术家名称、流派名称。

但它不起作用。

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;

谁能帮我解决这个问题。谢谢。

最佳答案

此语法不正确 Linq:

where s.SongID in (songIds)

与 SQL 的 WHERE IN 等效的 Linq 是使用 Contains()。您必须翻转语句并从列表开始:

where songIds.Contains(s.SongID)

在使用 Linq-to-SQL 时,您应该始终使用导航属性 而不是显式连接。如果您的表之间有适当的外键,这些属性将自动创建。将导航属性和 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
};

关于c# - Linq-to-SQL 选择多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8300873/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com