无法将类型'System.Collections.Generic.List <anonymoustype#1>'隐式转换为'System.Collections.Generic.IEnumerable <models> </models> </anonymoustype#1>

时间:2013-05-21 01:45:50

标签: c# asp.net asp.net-mvc linq entity-framework

当我为我加入DefaultIfEmpty()语句加入我的数据时,我的控制器有异常。 。

这是我的控制者:

        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(new APPLICANT())
                                 select new
                                            {
                                               APPLICANT = j, 
                                               Profile = a,
                                            }).Take(1000).AsEnumerable();

                   applicantdata = applicantList.ToList();


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

    }

这是我得到例外的一行:

applicantdata = applicantList.ToList();

这就是例外

无法将类型'System.Collections.Generic.List'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(您是否错过了演员?)

1 个答案:

答案 0 :(得分:2)

这听起来像是编译时错误而不是异常,但无论如何......

查看您的select条款:

select new
{
    APPLICANT = j, 
    Profile = a,
}

这只是一种匿名类型。您如何期望能够将其转换为APPLICANT?也许你只想要它的APPLICANT部分?它并不是很清楚,但如果您尝试将其转换为名为类型的列表,那么基本上您需要匿名类型。如果你只想让申请人加入j范围变量,只需使用:

select j

(顺便说一句,尝试尽可能遵循.NET命名约定是好的 - 类型名称和属性名称都不应该在SHOUTY_CASE中。)

相关问题