Error : CS0029 Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'X'?

Error : CS0029 Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'X'?

我正在尝试将数据从 LocalDb 获取到我的 MVC 控制器中。我正在使用此代码但不起作用:

 public StatusCategory BranchIdSearch(string branch){
     var categoryId = _context.StatusCategories
         .Where(a => a.StatusCategoryTitle.Contains(branch))
         .Select(a => a.StatusCategoryId)
         .ToList();
     return categoryId;
 }

错误:

CS0029 Cannot implicitly convert type 'System.Collections.Generic.List' to 'ProjectName.Data.Models.StatusCategory

StatusCategory.cs 文件:

public class StatusCategory
{
    [Key]
    public int StatusCategoryId { get; set; }
    public string StatusCategoryTitle { get; set; }
    public virtual IEnumerable<Status> Status { get; set; }
}

LocalDb Table :

StatusCategory Table Structure

需要帮助,知道为什么它不起作用吗?

您检索的是 List<int> 而不是单个 StatusCategory。要检索单个对象或值,您必须使用 FirstOrDefault。将您的查询更改为此以检索单个完整对象:

var categoryId = _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch))
     .FirstOrDefault();

 return categoryId;

如果您真的只想要 ID,那么您必须更改 return 类型和查询:

public int BranchIdSearch(string branch){
 var categoryId = _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch))
     .Select(a => a.StatusCategoryId)
     .FirstOrDefault();
 return categoryId;
}

您正在尝试 return 多个,即一个列表,但您的函数表示它应该 return 一个。

如果你想return一个StatusCategory.

public StatusCategory BranchIdSearch(string branch){
    return _context.StatusCategories.FirstOrDefault(a => a.StatusCategoryTitle.Contains(branch));
}

如果你想return一个StatusCategoryId

public int? BranchIdSearch(string branch){
    return _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch)).Select(a => (int?)x.StatusCategoryId).FirstOrDefault();
}

如果你想return很多StatusCategory

public IList<StatusCategory> BranchIdSearch(string branch){
    return _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch)).ToList();
}

如果你想return很多StatusCategoryId

public IList<int> BranchIdSearch(string branch){
    return _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch)).Select(a => x.StatusCategoryId).ToList();
}

您选择的是 List<int> 而不是单个 StatusCategory

可以直接使用FirstOrDefaultSingle

FirstOrDefault 将 return 找到的对象或 null

Single 将 return 对象或抛出异常,如果有超过一个对象符合条件

 public StatusCategory BranchIdSearch(string branch){
     var categoryId = _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch))
         .FirstOrDefault(a => a.StatusCategoryId);

     return categoryId;
 }

 public StatusCategory BranchIdSearch(string branch){
     var categoryId = _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch))
         .Single(a => a.StatusCategoryId);

     return categoryId;
 }