错误:CS0029无法隐式将类型'System.Collections.Generic.List '转换为'X'?

问题描述 投票:0回答:3

我正在尝试将数据从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无法将类型'System.Collections.Generic.List'隐式转换为'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表:

StatusCategory Table Structure

需要帮助,为什么不起作用?

c# asp.net-mvc entity-framework asp.net-core ienumerable
3个回答
4
投票

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

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

 return categoryId;

如果您真的只需要Id,则必须更改返回类型和查询:

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

-1
投票

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

您可以直接使用FirstOrDefaultSingle

FirstOrDefault将返回找到的对象或为空

[Single将返回该对象,或者如果存在一个以上条件的对象,则抛出异常

 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;
 }

-1
投票

您正在尝试返回许多列表,但您的函数说应该返回一个列表。

如果要返回一个StatusCategory

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

如果要返回一个StatusCategoryId

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

如果要返回很多StatusCategory

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

如果要返回很多StatusCategoryId

public IList<int> BranchIdSearch(string branch){
    return _context.StatusCategories.Where(a => a.StatusCategoryTitle.Contains(branch)).Select(a => x.StatusCategoryId).ToList();
}
© www.soinside.com 2019 - 2024. All rights reserved.