在 Web Api get 方法中将 Automapper 与 LINQ 结合使用
using Automapper with LINQ in Web Api get method
我有一个小网站Api方法。如何使用 Automapper 映射 GetBooks 方法中的属性?我已经尝试了解决方案 here 。
我试过了
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;
}
Book.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; }
}
BookDTO.cs
public class BookDTO
{
public int Id { get; set; }
public string Title { get; set; }
public string AuthorName { get; set; }
}
提前致谢。
在Global.asax.cs或[=31=中Book
和BookDTO
之间配置映射] 文件:
Mapper.CreateMap<Book, BookDTO>();
在 GetBooks()
方法中映射 db.Books
:
using AutoMapper.QueryableExtensions;
...
public IQueryable<BookDTO> GetBooks()
{
return db.Books.ProjectTo<BookDTO>();
}
你需要投影。参见 Automapper - Projection
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 和 Title 的投影线。阅读 AutoMapper 的文档以了解它使用的默认值。
我有一个小网站Api方法。如何使用 Automapper 映射 GetBooks 方法中的属性?我已经尝试了解决方案 here 。
我试过了
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;
}
Book.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; }
}
BookDTO.cs
public class BookDTO
{
public int Id { get; set; }
public string Title { get; set; }
public string AuthorName { get; set; }
}
提前致谢。
在Global.asax.cs或[=31=中
Book
和BookDTO
之间配置映射] 文件:Mapper.CreateMap<Book, BookDTO>();
在
GetBooks()
方法中映射db.Books
:using AutoMapper.QueryableExtensions; ... public IQueryable<BookDTO> GetBooks() { return db.Books.ProjectTo<BookDTO>(); }
你需要投影。参见 Automapper - Projection
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 和 Title 的投影线。阅读 AutoMapper 的文档以了解它使用的默认值。