C# 无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IEnumerable”

C# 无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IEnumerable”,c#,asp.net,asp.net-mvc,linq,entity-framework,C#,Asp.net,Asp.net Mvc,Linq,Entity Framework,现在我正在尝试正确的连接,出现了一个异常 这是我的控制器 public IEnumerable<APPLICANT> GetApplicant() { IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>; IEnumerable<Profile> profiledata = Ca

现在我正在尝试正确的连接,出现了一个异常

这是我的控制器

   public IEnumerable<APPLICANT> GetApplicant()
    {
        IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>;
        IEnumerable<Profile> profiledata = Cache.Get("profiles") as IEnumerable<Profile>;


        if (applicantdata == null)
        {

            var applicantList = (from a in context.Profiles 
                                 join app in context.APPLICANTs
                                 on a.PROFILE_ID equals app.Profile_id into joined
                                 from j in joined.DefaultIfEmpty()
                                 select new
                                            {
                                               APPLICANT = j, 
                                               Profile = a,
                                            }).Take(1000).AsEnumerable();

                   applicantdata = applicantList.AsEnumerable().ToList();


            if (applicantdata.Any())
            {
                Cache.Set("applicants", applicantdata, 30);
            }
        }
        return applicantdata;

    }
无法将类型“System.Collections.Generic.List”隐式转换为 'System.Collections.Generic.IEnumerable'。明确的 转换已存在。是否缺少转换

AppliantData使用new关键字是IEnumerable,这就是为什么不能将其转换为IEnumerable

您必须使用select语句中的属性创建一个临时类,并返回该类的IEnumerable

比如:

然后修改函数以返回IEnumerable


您不能向申请者投影,因为这似乎是通过实体框架生成的类

您将申请人数据定义为IEnumerable,但申请人列表的返回类型为IEnumerable


如果您想以这种方式使用匿名值,则需要一些函数将其从匿名值转换为申请者。

您可以设置返回类型

IQueryable
然后返回

applicantList.AsEnumerable().ToList().AsIQueryable();


将解决您的问题。

我认为这不是一种有效的实现方法,因为当您调用.ToList时,将执行查询并将数据捕获到内存中,然后再次转换为.AsQueryable。想象一下,如果你有上千张唱片,它的价格是多少。
如果我错了,请纠正我。干杯

而不是返回IEnumerable,而是返回IEnumerable,然后在执行查询调用时返回。ToLost on它

public IEnumerable GetApplicant()
    {
        IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>;
        IEnumerable<Profile> profiledata = Cache.Get("profiles") as IEnumerable<Profile>;


        if (applicantdata == null)
        {

            var applicantList = (from a in context.Profiles 
                                 join app in context.APPLICANTs
                                 on a.PROFILE_ID equals app.Profile_id into joined
                                 from j in joined.DefaultIfEmpty()
                                 select new
                                            {
                                               APPLICANT = j, 
                                               Profile = a,
                                            }).Take(1000); //AsEnumerable();

                   applicantdata = applicantList.ToList(); //applicantList.AsEnumerable();


            if (applicantdata.Any())
            {
                Cache.Set("applicants", applicantdata, 30);
            }
        }
        return applicantList.ToList(); //applicantdata;

    }

如何定义申请者?如果使用IEnumerable作为返回类型,那么为什么要在LINQ中创建匿名类型??您需要使用select new APPLICAMER{}您需要将applicantdata更改为MyClass类型并将分配放回。代码的全部要点是,如果查询已经在缓存中,就避免查询!先生,我认为这不起作用,因为应用程序数据是我的container@BobVale对谢谢你指出,我更关注错误,然后是一般方法,但是谢谢again@EnriqueGil,我不确定您的设计,但您可以将IEnumerable放入缓存,但我猜您已经找到了出错的原因,您正在选择匿名对象并尝试返回与代码中不同的类型。
IQueryable
applicantList.AsEnumerable().ToList().AsIQueryable();
public IEnumerable<APPLICANT> GetApplicant()
{
  applicantdata = applicantList.AsEnumerable().ToList().AsQueryable();

}
public IEnumerable GetApplicant()
    {
        IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>;
        IEnumerable<Profile> profiledata = Cache.Get("profiles") as IEnumerable<Profile>;


        if (applicantdata == null)
        {

            var applicantList = (from a in context.Profiles 
                                 join app in context.APPLICANTs
                                 on a.PROFILE_ID equals app.Profile_id into joined
                                 from j in joined.DefaultIfEmpty()
                                 select new
                                            {
                                               APPLICANT = j, 
                                               Profile = a,
                                            }).Take(1000); //AsEnumerable();

                   applicantdata = applicantList.ToList(); //applicantList.AsEnumerable();


            if (applicantdata.Any())
            {
                Cache.Set("applicants", applicantdata, 30);
            }
        }
        return applicantList.ToList(); //applicantdata;

    }