我正在运行查询以在单个选择下拉菜单中填充选项。当我调试下面的函数时,查询变量包含我期望的结果集。但是,当我跳到应该返回的位置旁边时,我收到错误:
'实体类型或复杂类型'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的任何提示或答案?谢谢。
答案 0 :(得分:4)
您不能在投影中使用框架相关/生成的实体(使用select new
),因此会出错。
看起来您正在尝试选择特定列而不是所有列,您的选项是
代码:
return query.Where(a => a.memLastName.Contains(searchText)); //without `select new`