Linq 查询未在 MVC 应用程序中转换为字符串

这个相当简单LINQ的查询用于根据其ID字段提取记录:


string s = (from i in db.Categories

            where i.CategoryID == model.SelectedCategory

            select i.Name).ToString();

if (ModelState.IsValid && model.ImageUpload.ContentLength > 0)

{

    string InitialPath = string.Format("/Images/Products/" + s + "/"); 

    var PathWithFileName = Path.Combine(InitialPath, model.ImageUpload.FileName); 

模型:


public class ItemVM

{

    public int? ID { get; set; }

    [Display(Name ="Category")]

    [Required(ErrorMessage ="Please select a category")]

    public int? SelectedCategory { get; set; }

    [Display(Name = "Brand")]

    [Required(ErrorMessage = "Please select a brand")]

    public int? SelectedBrand { get; set; }

    [Display(Name = "Product name")]

    [Required(ErrorMessage = "Please enter the product name")]

    public string ItemName { get; set; }

    [Display(Name = "Price")]

    [Required(ErrorMessage = "Please enter the price")]

    [Range(1, Int32.MaxValue, ErrorMessage = "Value should be greater than or equal to 1")]

    public decimal? ItemPrice { get; set; }

    [Display(Name = "Image Upload"), Required(ErrorMessage = "Product Image must be added.")]

    [NotMapped]

    [DataType(DataType.Upload)]

    public HttpPostedFileBase ImageUpload { get; set; }

    public IEnumerable<SelectListItem> CategoryOptions { get; set; }

    public IEnumerable<SelectListItem> BrandOptions { get; set; }

}

我需要使用s(字符串对象)来命名文件夹。不幸的是,这个查询没有返回一个字符串,我在最后一行代码中遇到错误: Illegal characters in path.


有人可以请指导。


慕的地6264312
浏览 131回答 1
1回答

翻阅古今

您收到错误的原因是因为ToStringlinq 的结果没有返回您所期望的。它调用ToString集合对象的 - 返回类的名称。您的 linq 返回一个 colleciton (即使它有一个项目)。您要做的是使用FirstOrDefault(或// SingleOrDefault)返回该项目:FirstSinglestring s = (from i in db.Categories&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where i.CategoryID == model.SelectedCategory&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; select i.Name).FirstOrDefault();在这种情况下,您可以更好地编写:string s = db.Categories.FirstOrDefault(i => i.CategoryID == model.SelectedCategory)?.Name;有关不同方法的更多信息:Entity Framework 4 Single() vs First() vs FirstOrDefault()(EF 的部分在这里不相关)。对于 Null 传播,请阅读此处:C#:新的和改进的 C# 6.0
打开App,查看更多内容
随时随地看视频慕课网APP