简体   繁体   中英

Returning IQueryable type: The entity or complex type '' cannot be constructed in a LINQ to Entities query

I am running a query to populate options in a single select drop down menu. When I debug the function below, the query variable contains the resultset that I am expecting. However when I skip next to where it should be returned to, I get the error:

'The entity type or complex type 'Models.zz_Member' cannot be constructed in a LINQ to Entities query."

    public IQueryable<zz_Member> GetMembers(string searchText)
    {
        var _db = new Portal.Models.AuthorizationContext();
        IQueryable<zz_Member> query = _db.zz_Members;

        return query //.Where(a => a.memLastName.Contains(searchText))
            .Select(a => new zz_Member()
                {
                    ID = a.ID,
                    memFirstName = a.memFirstName,
                    memLastName = a.memLastName
                }
            );
    }

The zz_Member model object is defined as:

    public class zz_Member
    {
        [ScaffoldColumn(false)]
        public int ID { get; set; }
        public string memFirstName { get; set; }
        public string memLastName { get; set; }
    }

The error is thrown when I try to convert to an IList, but when I check the value of memList using the debugger, it shows the error text in the results view.

    IQueryable<zz_Member> memList = GetMembers(e.Text);
    IList<zz_Member> memList2 = memList.ToList();

I have also tried writing the GetMembers functions to return the list as so:

    public IList<zz_Member> GetMembers(string searchText)
    {
        var _db = new WWCPortal.Models.AuthorizationContext();
        return (from m in _db.zz_Members
                where m.memLastName.Contains(searchText)
                select new zz_Member { ID = m.ID, memFirstName = m.memFirstName, memLastName = m.memLastName }).ToList();
    }

Any hints or answers to why the resultset appears to not be getting returned to the caller and put into memList? Thanks.

You cannot use framework dependant/generated entities in projection (with select new ), hence the error.


Looks like you are trying to select specific columns instead of all columns, your options are

  • Project to a new class with those specific members
  • return all fields/columns for your entities like:

Code:

 return query.Where(a => a.memLastName.Contains(searchText)); //without `select new`

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM