2

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

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”。

4

1 回答 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();

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

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

于 2013-11-04T15:15:17.003 回答