Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何在foreach循环外显示查询结果_C#_Entity Framework_Entity Framework Core - Fatal编程技术网

C# 如何在foreach循环外显示查询结果

C# 如何在foreach循环外显示查询结果,c#,entity-framework,entity-framework-core,C#,Entity Framework,Entity Framework Core,我有一个名为AllTracks.htmlcs.cs的文件,该文件将获取每个具有“AlbumId”行的曲目,该行与我的“Albums表中的“AlbumId”行相同 基本上,一旦执行了查询,它将只在AllTracks.htmlcs页面上加载正确的数据。它将加载轨迹ID、名称和运行时。基本上显示所选唱片集的曲目列表 我试图在页面顶部放置一个标题,显示相册名称,但在正常的@foreach循环之外,我似乎找不到正确的语法。有人能帮我调试代码吗 AllTracks.htmlcs代码段(标题应位于第1行) @

我有一个名为AllTracks.htmlcs.cs的文件,该文件将获取每个具有“AlbumId”行的曲目,该行与我的“Albums表中的“AlbumId”行相同

基本上,一旦执行了查询,它将只在AllTracks.htmlcs页面上加载正确的数据。它将加载轨迹ID、名称和运行时。基本上显示所选唱片集的曲目列表

我试图在页面顶部放置一个标题,显示相册名称,但在正常的@foreach循环之外,我似乎找不到正确的语法。有人能帮我调试代码吗

AllTracks.htmlcs代码段(标题应位于第1行)

@相册标题应该在这里
创建新轨道
@Html.DisplayName(“曲目ID”)
@Html.DisplayName(“名称”)
@Html.DisplayName(“运行时”)
编辑|删除
@foreach(Model.TracksList中的var项)
{
@DisplayFor(modelItem=>item.TrackId)
@DisplayFor(modelItem=>item.Name)
@{string min;}
@{
TimeSpan ts=TimeSpan.FromMillics(item.Millics);
}
@ts.ToString(@“mm\:ss”)
相关信息|
编辑
|
删除
}
AllTracks.htmlcs.cs代码段

public class AllTracksModel : PageModel
    {
        DatabaseContext _Context;
        public AllTracksModel(DatabaseContext databasecontext)
        {
            _Context = databasecontext;
        }
 
        public List<Track> TracksList { get; set; }
        public void OnGet(int? id)
        {
        var data = (from album in _Context.tracks
                            where album.AlbumId == id
                            select album).ToList(); 
 
            TracksList = data;  
        }

        public ActionResult OnGetDelete(int? id)
        {
            if (id != null)
            {
                        var data = _Context.tracks.ToList(); 
                            _Context.Remove(data);
                            _Context.SaveChanges();
            }
            return RedirectToPage("/AllTricks");
        }
    }
公共类AllTracksModel:PageModel
{
数据库上下文(DatabaseContext)上下文;;
公共AllTracksModel(DatabaseContext DatabaseContext)
{
_上下文=数据库上下文;
}
公共列表TracksList{get;set;}
公共网络(int?id)
{
var data=(来自_Context.tracks中的相册)
其中album.AlbumId==id
选择相册).ToList();
TracksList=数据;
}
公共行动结果OnGetDelete(int?id)
{
如果(id!=null)
{
var data=_Context.tracks.ToList();
_删除(数据);
_SaveChanges();
}
返回重定向Topage(“/AllTricks”);
}
}

您似乎没有将唱片集名称加载到发送到页面进行渲染的数据中。我可能会这样做:

    public string AlbumName {get;set;}
    public List<Track> TracksList { get; set; }
    public void OnGet(int? id)
    {
        //don't make confusing variable names. Don't call the items in tracks "album";they are not albums,they're tracks
        var data = (from track in _Context.tracks.Include(t=>t.Album)
                        where track.AlbumId == id
                        select track).ToList(); 

        TracksList = data;
        AlbumName = TracksList.First().Album.Name; //might have to adjust this to be the real property on Album


    }

当你在团队中工作时,你可能有一个前端的DEV,他们维护HTML并使它看起来很好,而且他们可能不喜欢在他们所做的事情中看到他们不理解的代码块,所以限制页面中的C的数量有助于人类关注的分离以及技术上的一个/P> 一旦您厌倦了编写将数据从db实体复制到视图模型实体并返回(TrackModel)的代码,请查看automapper库

    public string AlbumName {get;set;}
    public List<Track> TracksList { get; set; }
    public void OnGet(int? id)
    {
        //don't make confusing variable names. Don't call the items in tracks "album";they are not albums,they're tracks
        var data = (from track in _Context.tracks.Include(t=>t.Album)
                        where track.AlbumId == id
                        select track).ToList(); 

        TracksList = data;
        AlbumName = TracksList.First().Album.Name; //might have to adjust this to be the real property on Album


    }
//don't select db entity for page 
select track).ToList(); 

//have a dedicated class for page.. TrackModel is just a class with a few properties, little or no logic
select new TrackModel{
  Title=track.Title,
  RunTime=TimeSpan.FromMilliseconds(track.Milliseconds) //could also do string conversion here too
}).ToList();