C# 无法在Linq to实体查询中构造实体或复杂类型

C# 无法在Linq to实体查询中构造实体或复杂类型,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,大家好 无法遇到具有实体或复杂类型的Im 这是我第一次遇到这种错误 有人帮帮我吗 public IEnumerable<APPLICANT> GetApplicant() { IEnumerable<APPLICANT> applicantdata = Cache.Get("applicants") as IEnumerable<APPLICANT>; IEnumerable<Profile> p

大家好

无法遇到具有实体或复杂类型的Im 这是我第一次遇到这种错误 有人帮帮我吗

    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
                                where app.APPLICANT_LogicalDelete == false
                                select new APPLICANT()
                                 {
               APPLICANT_LastName = a.Applicant_LASTNAME,
               APPLICANT_FirstName = a.Applicant_FIRSTNAME,
               APPLICANT_MiddleName = a.Applicant_MIDDLENAME,
               APPLICANT_Address = a.Applicant_ADDRESS,
               APPLICANT_City = a.Applicant_CITY,
               APPLICANT_Phone = a.Applicant_PHONE,
                APPLICANT_Email= a.Applicant_EMAIL
           });

            applicantdata = applicantList.Where(v => !String.IsNullOrEmpty(v.APPLICANT_LastName)).OrderBy(v => v.APPLICANT_ID).ToList();

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

    }
上面这行的错误是


System.NotSupportedException:无法在LINQ to Entities查询中构造实体或复杂类型“Model.applicator”。

如果我没有错,您需要转换为可查询的对象

applicantdata = applicantList.AsQueryable().Where(v => !String.IsNullOrEmpty(v.APPLICANT_LastName)).OrderBy(v => v.APPLICANT_ID).ToList();
实体框架不支持这一点。它在使用查询时得到诊断,而不是在构造查询时得到诊断,这就是为什么获取异常的行令人困惑的原因

您可以构造任何不是数据库实体的类型,包括匿名类型,因此您可以这样做

select new
{
    a.Applicant_LASTNAME,
    a.Applicant_FIRSTNAME,
    a.Applicant_MIDDLENAME,
    a.Applicant_ADDRESS,
    a.Applicant_CITY,
    a.Applicant_PHONE,
    a.Applicant_EMAIL
}
如果需要,您可以在查询完成后将这些值放回
applicator
对象中

或者,如果合适,您可以直接向
申请人

select app

我不知道为什么您在
配置文件
申请人
中都有
申请人的姓
等,我不知道这些值是否相同。如果没有,最后的建议对你没有用。

错误是什么?我编辑了这个问题。错误为System.NotSupportedException:无法在LINQ to Entities查询中构造实体或复杂类型“Model.applicator”。不能对LINQ to Entities使用String.IsNullorEmpty(或任何其他“local”函数)。它不知道如何将其转换为数据库函数。这太痛苦了。经过数小时的搜索,尝试将其更改为Where(v=>v.applicator\u LastName!=null&&v.applicator\u LastName!=“”),终于找到了我的问题!非常感谢您的解释!!!!这显然是一篇老文章,但是有人知道所选的解决方案是否比使用DTO更好/更差吗?
select new
{
    a.Applicant_LASTNAME,
    a.Applicant_FIRSTNAME,
    a.Applicant_MIDDLENAME,
    a.Applicant_ADDRESS,
    a.Applicant_CITY,
    a.Applicant_PHONE,
    a.Applicant_EMAIL
}
select app