asp.net使用EntityFramework在html中显示联接的表

本文关键字:显示 html net 使用 EntityFramework asp | 更新日期: 2023-09-27 18:26:04

我完成了这个asp.net教程。

最后我有两个模型和两个脚手架项目。

模型作者

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ContosoBooks.Models
{
    public class Author
    {
        [ScaffoldColumn(false)]
        public int AuthorID { get; set; }
        [Required]
        [Display(Name = "Last Name")]
        public string LastName { get; set; }
        [Display(Name = "First Name")]
        public string FirstMidName { get; set; }
        public virtual ICollection<Book> Books { get; set; }
    }
}

模型书

using System.ComponentModel.DataAnnotations;
namespace ContosoBooks.Models
{
    public class Book
    {
        [ScaffoldColumn(false)]
        public int BookID { get; set; }
        [Required]
        public string Title { get; set; }
        public int Year { get; set; }
        [Range(1, 500)]
        public decimal Price { get; set; }
        public string Genre { get; set; }
        [ScaffoldColumn(false)]
        public int AuthorID { get; set; }
        // Navigation property
        public virtual Author Author { get; set; }
    }
}

现在,我想通过AuthorID将这两个表连接起来,并在主视图中简单地显示我的一个合并表。

最简单的方法是什么?

asp.net使用EntityFramework在html中显示联接的表

一个选项是使用LINQ连接这两个模型类,将合并后的Result获取到名为mergedResultViewModel的自定义视图模型对象列表中。以下代码中的TestDBContext是EF的dbContext。

var query = from au in TestDBContext.Authors join bk in TestDBContext.Books on au.AuthorID equals bk.AuthorID
    select new MergedResultViewModel { au.AuthorID, au.FirstMidName, bk.BookID, bk.Title, bk.Year, bk.Price, bk.Genre }
var mergedResultViewModel = query.ToList();

MergedResultViewModel类型可以在代码文件中定义如下。

public class MergedResultViewModel
    {
        public int AuthorID { get; set; }
        public string FirstMidName { get; set; }
        public int BookID { get; set; }
        public string Title { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }
        public string Genre { get; set; }
    }