【问题标题】:The Entity or complex type cannot be constructed in a Linq to Entity Query无法在 Linq to Entity 查询中构造实体或复杂类型
【发布时间】:2013-05-10 05:20:24
【问题描述】:

祝大家有美好的一天。

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

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

    }

这是我遇到错误的行 谢谢!

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

上面一行的错误是

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

【问题讨论】:

  • 错误是什么?
  • 我编辑了这个问题。错误是 System.NotSupportedException:无法在 LINQ to Entities 查询中构造实体或复杂类型“Model.APPLICANT”。
  • 您不能将 String.IsNullorEmpty(或任何其他“本地”函数)与 LINQ to Entities 一起使用。它不知道如何将其转换为数据库函数。这是一个彻头彻尾的痛苦。
  • 试图将其更改为 Where(v => v.APPLICANT_LastName != null && v.APPLICANT_LastName != " ")

标签: c# asp.net-mvc-3


【解决方案1】:
select new APPLICANT()

实体框架不支持这个。它在使用查询时得到诊断,而不是在构造查询时得到诊断,这就是为什么你得到异常的行令人困惑的原因。

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

select new
{
    a.Applicant_LASTNAME,
    a.Applicant_FIRSTNAME,
    a.Applicant_MIDDLENAME,
    a.Applicant_ADDRESS,
    a.Applicant_CITY,
    a.Applicant_PHONE,
    a.Applicant_EMAIL
}

如果需要,您可以在查询执行完成后将这些值放回 APPLICANT 对象中。

或者,如果合适,您可以直接APPLICANT

select app

我不确定为什么ProfileAPPLICANT 中都有Applicant_LASTNAME 等,我不知道值是否相同。如果不是,那么最后一条建议对您没有用处。

【讨论】:

  • 经过几个小时的搜索,终于找到了我的问题!非常感谢您的解释!!!!
  • 这显然是一篇较旧的帖子,但有谁​​知道所选解决方案是否比使用 DTO 更好/更差?
【解决方案2】:

如果我没记错的话,你需要转换为 Queryable 对象。

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

【讨论】:

    猜你喜欢
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 2017-05-31
    • 2015-02-06
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多