【问题标题】:The entity or complex type ' ' not be constructed in a LINQ to Entities query实体或复杂类型“ ”未在 LINQ to Entities 查询中构造
【发布时间】:2013-05-22 01:34:09
【问题描述】:

我希望有人可以帮助我,因为当我编辑我的代码时。异常显示

这是我的控制器

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

    if (applicantdata == null)
    {
        var data = from app in context.APPLICANTs
                   join a in context.Profiles
                   on app.Profile_id equals a.PROFILE_ID into output
                   from j in output.DefaultIfEmpty()
                   select new { 
                       Id = app.APPLICANT_ID, 
                       LastName = 
                           (j == null ? app.APPLICANT_LastName : j.Applicant_LASTNAME) 
                   };

        var applicant = data
            .Where(v => !String.IsNullOrEmpty(v.LastName))
            .Take(1000);

        applicantdata = (from a in applicant
                         select new APPLICANT() { 
                             APPLICANT_ID = a.Id, 
                             APPLICANT_LastName = a.LastName
                         }).AsEnumerable();

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

    return applicantdata;    
}

这是个例外:

NotSupportedException 未被用户代码处理。实体或复杂类型“ ”未在 LINQ to Entities 查询中构造。 LINQ ASP.NET

在这一行:

if (applicantdata.Any())

【问题讨论】:

  • 在线if (applicantdata.Any()),您是不是要检查操作是否返回记录?
  • 您不能投影到映射实体中。 stackoverflow.com/a/5325861/1914530
  • @GianAcuna 是的,先生,这是if (applicantdata.Any()) 的功能
  • @bmused 但我该如何实现呢?
  • 不清楚您要做什么。您似乎正在尝试获取 APPLICANT 类型的 EF 实体,但由于某种原因,您加入并投影为匿名类型。然后,您尝试从匿名类型中的数据构造一个新的APPLICANT。我建议您查看 here 以获取有关如何编写 LINQ to Entities 查询的示例。

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


【解决方案1】:

在 Linq-to-Entities 中,您只能投影到任何现有的映射实体类型,但您可以投影到匿名类型

applicantdata = (from a in applicant
                     select new APPLICANT() { 
                         APPLICANT_ID = a.Id, 
                         APPLICANT_LastName = a.LastName
                     }).AsEnumerable();

在上面的代码中,您尝试投影为“APPLICANT”类型,因此它不允许您这样做。您可以尝试使用匿名类型:

applicantdata = (from a in applicant
                     select new { 
                         APPLICANT_ID = a.Id, 
                         APPLICANT_LastName = a.LastName
                     }).AsEnumerable();

希望这会有所帮助!

【讨论】:

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