C# 从数据库创建Id列表。C

C# 从数据库创建Id列表。C,c#,list,asp.net-core,model-view-controller,C#,List,Asp.net Core,Model View Controller,我试图生成一个随机ID号,所以当用户点击一个按钮时,它会重定向到一个随机艺术家。我能够做到这一点,它与下面的代码配合得很好 var artists = _context.Artists; var totalArtists = artists.Count(); Random randomArtistNumber = new Random(); int randomArtistID = randomArtistNumber.Next(1, totalArtists + 1); if (button

我试图生成一个随机ID号,所以当用户点击一个按钮时,它会重定向到一个随机艺术家。我能够做到这一点,它与下面的代码配合得很好

var artists = _context.Artists;
var totalArtists = artists.Count();
Random randomArtistNumber = new Random();
int randomArtistID = randomArtistNumber.Next(1, totalArtists + 1);

if (button.Equals("btnArtist"))
{
    return RedirectToAction("Details", "ArtistModels", new { id = randomArtistID.ToString() });
}
这里的问题是,如果用户删除了一个艺术家,那么我的ID号将不再存在于上面创建的随机列表中。如何创建艺术家表中所有艺术家的列表?从活动ID列表中选择一个随机数会更好

下面是ArtistModel

public class ArtistModel
    {
        [Key]
        public int ArtistID { get; set; }
        public string ArtistName { get; set; }
        public string CountryOfOrigin { get; set; }
        public int SubgenreID { get; set; }
        public SubgenreModel Subgenre { get; set; }

        public ICollection<AlbumModel> Albums { get; set; }
    }

我猜您正在使用实体框架

通过这样做,您应该能够从艺术家那里获得ID列表

var artistIds = artists.Select(a => a.Id).ToList();
要正确执行此操作,您需要确保始终从上下文加载所有艺术家


如果您的随机函数有一个限制,比如从前200个艺术家中随机选择或其他什么,可能会更好。

我猜您使用的是实体框架

通过这样做,您应该能够从艺术家那里获得ID列表

var artistIds = artists.Select(a => a.Id).ToList();
要正确执行此操作,您需要确保始终从上下文加载所有艺术家


如果你的随机函数有一个限制的话,可能会更好,比如从前200个艺术家中随机选择或者什么的。

既然你已经有了艺术家,你实际上可以做的就是得到一个随机艺术家,它与你拥有的不会有太大的不同

比如:

int randomArtistIndex = randomArtistNumber.Next(1, totalArtists); 
var artist = artists[randomArtistIndex]
然后

return RedirectToAction("Details", "ArtistModels", new { id = artist.ArtistID.ToString() });

既然你已经有了艺术家,你实际上可以做的就是随机挑选一个艺术家,这和你现在拥有的没有多大区别

比如:

int randomArtistIndex = randomArtistNumber.Next(1, totalArtists); 
var artist = artists[randomArtistIndex]
然后

return RedirectToAction("Details", "ArtistModels", new { id = artist.ArtistID.ToString() });

这回答了你的问题吗?这回答了你的问题吗?无法将带[]的索引应用于DbSetMy bad类型的表达式,下次请使用。应执行此操作的ToList不能将带[]的索引应用于DbSetMy bad类型的表达式,下次请使用。应执行此操作的ToList此操作非常有效谢谢,我不知道Select函数,这正是我想要的。这种方法的问题是,如果艺术家的数量很大,那么你的名单就会很大。另一种方法是不缓存ID。相反,请随机选择一位艺术家。如果美工查找失败,请回到井中,再拉一口井。这样做直到你成功。一个巨大的列表会成为一个内存问题吗?@elementmg是的,一个巨大的列表会成为一个内存问题。由于许多原因,它不太实用。随着艺术家名单的增加,它变得越来越不可持续。您可以很容易地应用一些逻辑,首先获取您拥有的记录总数,然后从总范围内的某个位置获取100个记录ID,然后对其应用随机化…这非常有效谢谢,我不知道选择函数,这正是我想要的。这种方法的问题是,如果艺术家的数量很大,那么你的名单就会很大。另一种方法是不缓存ID。相反,请随机选择一位艺术家。如果美工查找失败,请回到井中,再拉一口井。这样做直到你成功。一个巨大的列表会成为一个内存问题吗?@elementmg是的,一个巨大的列表会成为一个内存问题。由于许多原因,它不太实用。随着艺术家名单的增加,它变得越来越不可持续。您可以很容易地应用一些逻辑,首先获取您拥有的记录总数,然后从总范围内的某个位置获取100个记录ID,然后对其应用随机化。。。