c# - 无法在 LINQ to Entities 查询中构建

标签 c# linq oop

<分区>

下面显示错误的代码有什么问题

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

如上所述,我只需要选择两列

显示以下错误

The entity or complex type 'JobPortalModel.specialisation_sub' cannot be constructed in a LINQ to Entities query.

最佳答案

您不能将结果投影到任意 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 开销。

关于c# - 无法在 LINQ to Entities 查询中构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770760/

相关文章:

c# - C# 中的 Regex.match 性能问题

c# - 我如何使用 linq 查找数据集中出现次数最多的数据?

c# - Linq - 选择一个特定的列

c# - 如何在 LINQ select 语句中使用 Lambda

c++ - 有没有办法在 C++ 基类中创建 "virtual"变量?

c# - 如何从IPageStructure中找出父页面Id? (复合C1)

c# - 比较 2 个列表

java - 在不违反基本 OOP 规则的情况下添加新功能

PHP用多个变量多次初始化一个类

c# - 带对象的全局静态类