无法将类型“IQueryable”隐式转换为 Generic.IList' 从 EF 上下文中检索记录列表作为列表

Posted

技术标签:

【中文标题】无法将类型“IQueryable”隐式转换为 Generic.IList\' 从 EF 上下文中检索记录列表作为列表【英文标题】:Cannot implicitly convert type 'IQueryable' to Generic.IList' Retrieve list of records as List from EF context无法将类型“IQueryable”隐式转换为 Generic.IList' 从 EF 上下文中检索记录列表作为列表 【发布时间】:2021-12-06 21:03:49 【问题描述】:

我有一个方法:

1.

public ActionResult<List<CountryMst>> GetStateById(int countryId)

     // return specific column
     var stateList = databaseContext.statemaster
                        .Where(a => a.countryMstId == countryId)
                        .Select(a => new  a.stateId, a.stateName);
     return stateList;
                        


public class CountryMst

     [Key]
     public int countryId  get; set; 

     public string countryName  get; set; 



public class StateMst

     [Key]
     public int stateId  get; set; 

     public string stateName  get; set; 

     public CountryMst countryMst  get; set; 

     public int countryMstId  get; set; 


和所选位置的错误: 错误 CS0029 无法将类型 'System.Linq.IQueryable>' 隐式转换为 'Microsoft.AspNetCore.Mvc.ActionResult >'

知道怎么解决吗?

【问题讨论】:

我最后使用了 ToList() 但没有用 从错误消息中可以看出,您在 Select 中返回了一个匿名类型,但该方法应该返回 CountryMst 的类型 - 您对此进行过调查吗? 【参考方案1】:

错误消息在这里很好地解释了问题:

.Select(a => new  a.stateId, a.stateName)

返回一个 System.Linq.IQueryable&lt;&lt;anonymous type: int stateId, string stateName&gt;&gt; 这是你不能转换为 List&lt;AngularWebApi.Entity.Entities.CountryMst&gt; 的东西(没有明确解释如何)。 意思是,你需要在选择中使用你的类:

.Select(a => new CountryMst
    
      countryId = a.stateId, 
      countryName = a.stateName,
   ) 
.ToList()

【讨论】:

以上是关于无法将类型“IQueryable”隐式转换为 Generic.IList' 从 EF 上下文中检索记录列表作为列表的主要内容,如果未能解决你的问题,请参考以下文章

无法将匿名类型从“System.Linq.IQueryable”转换为“System.Data.Entity.Core.Objects.ObjectQuery”

使用 Distinct() 过滤 Linq 中的重复记录

如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable?

无法将类型 ('string', 'string') 隐式转换为 System.Net.ICredentialsByHost

无法将类型“unityengine.vector3”隐式转换为“float”

C#错误(无法将类型'string'隐式转换为'int')[重复]