Nao*_*aor 16 .net c# linq-to-entities entity-framework
我有两张桌子:车辆和工人.
Vehicle(Id, Number)
Workers(Id, Name, ContractorVehicleNumber)
Run Code Online (Sandbox Code Playgroud)
我想写lambda查询来返回所有车辆和承包商车辆.在sql中的东西:
SELECT Id, Number
FROM Vehicle
UNION
SELECT NULL, ContractorVehicleNumber
FROM Workers
Run Code Online (Sandbox Code Playgroud)
这就是我所做的:
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;
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个例外:
无法在LINQ to Entities查询中构造实体或复杂类型"XXXXXXXX".
Lad*_*nka 15
您无法在投影中构造映射的实体类型.您之前的示例仅在您创建用于投影的新特殊类型时才有效:
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
}
Run Code Online (Sandbox Code Playgroud)
你的方法看起来像:
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;
}
Run Code Online (Sandbox Code Playgroud)
您无法在select语句中创建实体.试试这个:
public class VehicleDTO
{
public int Id { get; set; }
public int Number { get; set; }
}
public IQueryable<VehicleDTO> Get(bool includeContractorVehicles)
{
var query = GetQuery().Select(x => new VehicleDTO(){ ID = c.ID, Number = c.Number });
if (includeContractorVehicles)
{
WorkerRepository rep = new WorkerRepository();
var contractorsVehicles = rep.GetWirkers().
Select(x => new VehicleDTO(){ Number = x.ContractorVehicleNumber});
query = query.Union(contractorsVehicles);
}
return query;
}
Run Code Online (Sandbox Code Playgroud)
你确定你想要一个Union而不是一个Concat吗?
| 归档时间: |
|
| 查看次数: |
42470 次 |
| 最近记录: |