首页 文章

无法在LINQ to Entities查询中构造[重复]

提问于
浏览
1

这个问题在这里已有答案:

以下代码显示错误的问题是什么

public IList<specialisation_sub> GetAllActiveSpecialisation_Sub(
    int specialisationid)
{
    var queryList = _db.specialisation_sub
                        .Where(obj => obj.isdeleted == false &&
                            obj.specialisationid == specialisationid)
                        .Select(obj => new specialisation_sub()
                        {
                            Id = obj.Id,
                            name = obj.name
                        }).ToList();

    return queryList.ToList<specialisation_sub>();
}

我需要如上所述仅选择两列

显示以下错误

无法在LINQ to Entities查询中构造实体或复杂类型“JobPortalModel.specialisation_sub” .

1 回答

  • 5

    您无法将结果投影到任意CLR类型 . 但是,您可以投射到匿名类型:

    var queryList = _db.specialisation_sub
                       .Where(obj => obj.isdeleted == false && obj.specialisationid == specialisationid)
                       .Select(obj => new { Id = obj.Id, name = obj.name })
                       .ToList();
    

    如有必要,您可以将结果转换为其他类型:

    return queryList.Select(o => new specialisation_sub { Id = o.Id, name = o.name })
                    .ToList();
    

    如果您进行了这样的转换,请随意用 AsEnumerable() 替换第一个 ToList() 调用,以避免分配不必要的中间列表 .

    我和@Tilak的答案之间的关键区别在于我的只会从数据库中检索所需的两列,而@Tilak的答案将检索所有列,尽管在最终结果中只使用了两列 . 根据每个实体的大小,这可能是大量的内存和/或IO开销 .

相关问题