在 Web Api get 方法中使用 Automapper 和 LINQ
本文关键字:Automapper LINQ Web Api get 方法 | 更新日期: 2023-09-27 18:35:32
我有一个小的Web Api方法。如何使用自动映射器映射 GetBooks 方法中的属性?我已经在这里尝试了解决方案.
我试过了
return from c in db.Books select Mapper.Map<BookDTO>(c);
但它没有用。这是我的完整代码;
//GET: api/Books
public IQueryable<BookDTO> GetBooks()
{
var books = from b in db.Books
select new BookDTO()
{
Id = b.Id,
Title = b.Title,
AuthorName = b.Author.Name
};
return books;
}
书.cs
public class Book
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
public int Year { get; set; }
public decimal Price { get; set; }
public string Genre { get; set; }
// Foreign Key
public int AuthorId { get; set; }
// Navigation property
public Author Author { get; set; }
}
书东.cs
public class BookDTO
{
public int Id { get; set; }
public string Title { get; set; }
public string AuthorName { get; set; }
}
提前谢谢。
-
Global.asax 或 Startup.cs 文件中
Book
和BookDTO
之间的配置映射.cs:Mapper.CreateMap<Book, BookDTO>();
-
GetBooks()
方法中的映射db.Books
:using AutoMapper.QueryableExtensions; ... public IQueryable<BookDTO> GetBooks() { return db.Books.ProjectTo<BookDTO>(); }
你需要投影。请参阅自动映射器 - 投影
Mapper.CreateMap<Book, BookDTO>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.Title, opt => opt.MapFrom(src => src.Title))
.ForMember(dest => dest.AuthorName, opt => opt.MapFrom(src => src.Author.Name));
IEnumerable<Book> books = db.Books.Cast<Book>();
// assuming Books implements IEnumerable
BookDTO result = Mapper.Map<Book, BookDTO> books;
我不确定您是否需要属性 ID 和标题的投影线。阅读自动映射器的文档,了解它使用的默认值。