返回IQueryable类型:实体或复杂类型''无法在LINQ to Entities查询中构造

时间:2015-03-24 16:55:53

标签: c# linq entity-framework

我正在运行查询以在单个选择下拉菜单中填充选项。当我调试下面的函数时,查询变量包含我期望的结果集。但是,当我跳到应该返回的位置旁边时,我收到错误:

  

'实体类型或复杂类型'Models.zz_Member'不能在LINQ to Entities查询中构造。“

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

zz_Member模型对象定义为:

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

当我尝试转换为IList时抛出错误,但是当我使用调试器检查memList的值时,它会在结果视图中显示错误文本。

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

我还尝试编写GetMembers函数来返回列表:

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

为什么结果集似乎没有返回给调用者并放入memList的任何提示或答案?谢谢。

1 个答案:

答案 0 :(得分:4)

您不能在投影中使用框架相关/生成的实体(使用select new),因此会出错。


看起来您正在尝试选择特定列而不是所有列,您的选项是

  • 使用 特定成员
  • 投影到新班级
  • 返回您实体的所有字段/列,如:

代码:

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