c# - Entity Framework 中的联盟

标签 c# .net entity-framework linq-to-entities

我有两个表:Vehicles 和 Workers。

Vehicle(Id, Number)
Workers(Id, Name, ContractorVehicleNumber)

我想编写 lambda 查询以返回所有车辆和承包商车辆。像在 sql 中的东西:

SELECT Id, Number
FROM Vehicle
UNION
SELECT NULL, ContractorVehicleNumber
FROM Workers

这是我做的:

public IQueryable<Vehicle> Get(bool includeContractorVehicles)
{
    IQueryable<Vehicle> query = GetQuery();

    if (includeContractorVehicles == true)
    {
        WorkerRepository rep = new WorkerRepository();
        IQueryable<Vehicle> contractorsVehicles = rep.GetWirkers().
            Select(x => new Vehicle()
            {
                VehicleNumber = x.ContractorVehicleNumber
            });
        query = query.Union(contractorsVehicles);
    }

    return query;
}  

但我得到一个异常(exception):

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

最佳答案

您不能在投影中构造映射实体类型。仅当您创建用于投影的新特殊类型时,您之前的示例才会起作用:

public class VehicleResult
{
    public string Number { get; set; }
    ... // If you don't need more then one column you can use simple type instead of custom class
}

您的方法将如下所示:

public IQueryable<VehicleResult> Get(bool includeContractorVehicles)
{
    IQueryable<VehicleResult> query = GetQuery().Select(v => new VehicleResult { ... });

    if (includeContractorVehicles == true)
    {
        WorkerRepository rep = new WorkerRepository();
        IQueryable<VehicleResult> contractorsVehicles = rep.GetWorkers().
            Select(x => new VehicleResult()
            {
                Number = x.ContractorVehicleNumber
            });
        query = query.Union(contractorsVehicles);
    }

    return query;
}  

关于c# - Entity Framework 中的联盟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483711/

相关文章:

c# - 在 C# 中使用安全的 websocket

C# 泛型 - 我可以将此类变成泛型吗?

c# - 根据 JSON 对象属性对 jquery DataTables 进行排序 - 使用正交数据

c# - Resharper — 修复多个问题

c# - DateTime.TryParse 可以(明确)识别哪些格式?

.net - 如何在 Linux 下使用 Mono 运行我的 C# Visual Studio 应用程序?

entity-framework - 使用 Entity Framework 处理并发的最佳方式

c# - 存储库中 Database.SetInitializer<ArContext>(null) 的用途?

asp.net-mvc - 基于 View 模型属性的网格排序

c# - 使用远程管理员凭据将文件复制到远程计算机