我正在與 EF Core 一起開發 .NET Core 6。我想使用 ProjectTo 將我在 LINQ 中擁有的 Customer 和 Order 物件轉換select為 CustomerDto 和 OrderDto。
使用庫
using AutoMapper;
using AutoMapper.QueryableExtensions;
我知道使用以下專案映射 IQuerable
var x = (from customer in db.Customers
where customer.CustomerId == CustomerId
select customer).ProjectTo<CustomerDto>(_mapper.ConfigurationProvider);
但不確定如何在 new 內部進行投影,或者是否應該以不同的方式進行?下面是我希望客戶到 CustomerDto 和 Order 到 OrderDto 的 LINQ 代碼
var customerOrdersQuery =
(from customer in db.Customers.Where(x => x.CustomerId == CustomerId)
join orders in db.Orders on customer.CustomerId equals orders.CustomerId into cst_Ord
from customerOrders in cst_Ord.DefaultIfEmpty()
select new {
customer, //ProjectTo<CustomerDto>
customerOrders //ProjectTo<OrderDto>
}).AsEnumerable();
uj5u.com熱心網友回復:
Afaik 您需要一個中間類 CustomerWithOrdersSource,您使用 Automapper 的 ProjectTo 將其映射到 CustomerWithOrdersDto。
映射
public class CustomerWithOrdersSource
{
public Customer Customer {get;set;}
public ICollection<Order> Orders {get;set;}
}
public class CustomerWithOrdersDto
{
public CustomerDto Customer {get;set;}
public ICollection<OrderDto> Orders {get;set;}
}
CreateMap<CustomerWithOrdersSource, CustomerWithOrdersDto>();
詢問
var customerOrdersQuery =
(from customer in db.Customers.Where(x => x.CustomerId == CustomerId)
join orders in db.Orders on customer.CustomerId equals orders.CustomerId into cst_Ord
from customerOrders in cst_Ord.DefaultIfEmpty()
select new CustomerWithOrdersSource() {
Customer = customer,
Orders = customerOrders
}).ProjectTo<CustomerWithOrdersDto>(_mapper.ConfigurationProvider);
編輯:根據@Lucian Bargaoanu,您也可以直接從匿名物件進行投影。但是,如果以后有必要,您可以通過編輯映射組態檔輕松自定義映射。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466744.html
