当前位置: 首页 > 编程语言 > C#

实体框架中的联合共享

时间:2023-04-10 20:47:36 C#

实体框架中的联合我有两个表:Vehicles和Workers。Vehicle(Id,Number)Workers(Id,Name,ContractorVehicleNumber)我想编写lambda查询以返回所有车辆和承包商车辆。类似于sql中的内容:SELECTId,NumberFROMVehicleUNIONSELECTNULL,ContractorVehicleNumberFROMWorkers这就是我所做的:publicIQueryableGet(boolincludeContractorVehicles){IQueryablequery=GetQuery();if(includeContractorVehicles==true){ReposoryWorkerrep=newWorkerRepository();IQueryablecontractorsVehicles=rep.GetWirkers().Select(x=>newVehicle(){VehicleNumber=x.ContractorVehicleNumber});query=query.Union(contractorsVehicles);}返回查询;但我遇到了一个例外:无法在LINQtoEntities查询中构造实体或复杂类型'XXXXXXXX'。您不能在投影中构造映射的实体类型。您之前的示例仅在您为投影创建新的特殊类型时才有效:publicclassVehicleResult{publicstringNumber{get;放;}...//如果你不需要超过一列,你可以使用简单类型而不是自定义类}你的方法看起来像:=>新的VehicleResult{...});if(includeContractorVehicles==true){WorkerRepositoryrep=newWorkerRepository();IQueryablecontractorsVehicles=rep.获取工人()。Select(x=>newVehicleResult(){Number=x.ContractorVehicleNumber});查询=查询。联盟(承包商车辆);}返回查询;您不能在select语句中创建实体。试试这个:publicclassVehicleDTO{publicintId{get;放;}publicintNumber{get;放;}}publicIQueryableGet(boolincludeContractorVehicles){varquery=GetQuery().Select(x=>newVehicleDTO(){ID=c.ID,Number=c.Number});如果(includeContractorVehicles){WorkerRepositoryrep=newWorkerRepository();varcontractorsVehicles=rep.GetWirkers()。Select(x=>newVehicleDTO(){Number=x.ContractorVehicleNumber});query=query.Union(contractorsVehicles);}返回查询;你确定你想要一个Union而不是Concat吗?以上就是C#学习教程:实体框架联盟分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: