我有一個模型類,如下所示:
public class ProductsViewModel
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool IsActive{ get; set; }
}
并在物體下方:
[Table("Products")]
public partial class Products
{
[Column("ProductId")]
public int ProductId { get; set; }
[Column("ProductName")]
public string ProductName{ get; set; }
[Column("IsActive")]
public bool IsActive { get; set; }
}
我正在使用以下 LINQ 查詢獲取結果,該查詢回傳正確的資料:
List<Products> productData = _context.Products
.Where(x => x.IsActive == true).ToList();
現在,我想將這些資料與 productData我的模型系結,類似于ProductsViewModel = productData.
我知道我可以遍歷productData記錄并將值分配給模型屬性,但我正在尋找一種直接映射這兩者的方法。
是否有任何快速方法可以將所有productData分配給我的模型?
uj5u.com熱心網友回復:
是否有任何快速方法可以將所有
productData分配給我的模型?
有幾個。您可以按照另一個答案中的說明使用Automapper ,或者也可以使用Automapper,對于更復雜的映射,您可以為所需的任何外來映射配置AutoMapper 組態檔。
對于使用的直接賦值=,就像你在你的問題中舉例說明的那樣,我認為對于不太復雜的物體來說可能是更簡單的方法,你可以通過在ProductsViewModel類中多載賦值運算子來做到這一點:
public class ProductsViewModel
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public bool IsActive { get; set; }
public static implicit operator ProductsViewModel(Products obj)
{
return new ProductsViewModel()
{
ProductName = obj.ProductName,
IsActive = obj.IsActive,
ProductId = obj.ProductId,
};
}
}
現在您的直接分配將正常作業。
例如,使用Select和直接分配(或由于運算子多載而可能的強制轉換):
var productsViewModels = _context.Products.Where(x => x.IsActive)
.Select(x => (ProductsViewModel)x).ToList();
或顯式賦值:
var productsViewModels = _context.Products.Where(p => p.IsActive)
.Select(x => { ProductsViewModel model = x; return model; }).ToList();
為了方便起見,您可以在此處查閱一些運行代碼。
uj5u.com熱心網友回復:
您可以使用映射框架,我使用最多的是 Automapper https://docs.automapper.org/en/stable/Getting-started.html。
public class AClass {
private readonly IMapper _mapper;
private readonly ADbContext _dbContext;
public AClass (IMapper mapper, ADBContext dbContext)
{
_mapper = mapper;
_dbContext = dbContext;
}
public async Task<IEnumerable<ProductViewModel>> AMethod()
{
var dbProducts = await _dbContext.Products.Where(x => x.IsActive == true).ToListAsync();
return dbProducts.Select(x => _mapper.Map<ProductViewModel>(x))
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506989.html
