gpt4 book ai didi

c# - 在 Controller 内构建模型时如何将 Byte[] 隐式转换为字符串

转载 作者:行者123 更新时间:2023-11-30 20:32:25 24 4
gpt4 key购买 nike

我正在使用请求 product/index/[Category ID] 加载索引页面上属于唯一类别的所有产品。

我有一个 ProductViewModel 类,其中包含用于在两者之间转换类型的隐式方法,还有一个 Product 实体模型类。将 Product 实体转换为 ProductViewModel 的隐式方法包含将字节转换为 base64 字符串的方法,我在 Controller 中使用它成功地创造了新的类别和产品。

public class ProductViewModel
{
public int Id { get; set; }
[Required, Display(Name="Product Name")]
public string Name { get; set; }
[Required, DataType(DataType.Upload)]
public HttpPostedFileBase Image { get; set; }
public string OutputImage { get; set; }
[Required]
public Decimal Price { get; set; }

public static byte[] ConvertToByte(ProductViewModel model)
{
if (model.Image != null)
{
byte[] imageByte = null;
BinaryReader rdr = new BinaryReader(model.Image.InputStream);
imageByte = rdr.ReadBytes((int)model.Image.ContentLength);

return imageByte;
}

return null;
}

// ViewModel => Model | Implicit type Operator
public static implicit operator Product(ProductViewModel viewModel)
{
var model = new Product
{
Id = viewModel.Id,
Name = viewModel.Name,
Image = ConvertToByte(viewModel),
Price = viewModel.Price
};

return model;
}

// Model => ViewModel | Implicit type Operator
public static implicit operator ProductViewModel(Product model)
{
var viewModel = new ProductViewModel
{
Id = model.Id,
Name = model.Name,
OutputImage = string.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(model.Image)),
Price = model.Price
};

return viewModel;
}

}

但是,当传递包含属于要在产品 View 上显示的唯一类别 ID 的所有产品的模型时,我无法将字节隐式转换为字符串。我用作替代方法的方法不被接受,并出现错误:

LINQ to Entities does not recognize the method 'System.String Format(System.String, System.Object)' method, and this method cannot be translated into a store expression.

Controller 中的模型如下:

var products = (await db.Categories.Where(c => c.Id == id).Select(p => p.Products.Select(x => new 
ProductViewModel { Id = x.Id, Name = x.Name, OutputImage = (string.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(x.Image))), Price = x.Price})).ToListAsync());
return View(products);

我为View提供的Model类型如下:

@model List<IEnumerable<ValueVille.Models.ProductViewModel>>

最佳答案

您不能在 LINQ 表达式中使用 string.Format(),而是可以在 Name setter 中使用它:

public class ProductViewModel {

public string Name{
get
{
return this.Name;
}
set{
this.Name = value;
this.OutputImage = string.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(value))
}
}
}

在 Controller 中:

var products = (await db.Categories.Where(c => c.Id == id).Select(p => p.Products.Select(x => new 
ProductViewModel { Id = x.Id, Name = x.Name, Convert.ToBase64String(x.Image))), Price = x.Price})).ToListAsync());

关于c# - 在 Controller 内构建模型时如何将 Byte[] 隐式转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41524547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com