将 t-sql 查询转换为 EF 的方法语法

本文关键字:方法 语法 EF t-sql 查询 转换 | 更新日期: 2023-09-27 18:35:29

以下

TSQL 查询的 EF 方法语法等效项是什么?

select istb.service_id, ss.service_desc, selected=1
from istb_services istb
inner join setup_services ss on istb.service_id=ss.service_id
where istb.istb_id=3
union
select ss.service_id, ss.service_desc, selected=0
from setup_services ss
where ss.service_id not in (select service_id from istb_services where istb_id=3)

我尝试转换查询的 not 部分,如下所示:

var _existing = context.istb_services.Where(e => e.istb_id == IstbID);
var _others = context.setup_services.Except(_existing);

但它正在生成编译时错误:

'System.Data.Objects.ObjectQuery.Except(System.Data.Objects.ObjectQuery)'的最佳重载方法匹配有一些无效的参数

我知道我不能将不同类型的对象查询传递给 .除了方法,但替代代码是什么?

谢谢

将 t-sql 查询转换为 EF 的方法语法

尝试以下操作:

var resultA = 
    from istb in istb_services 
    join ss in setup_services on istb.service_id equals ss.service_id
    where istb.istb_id == 3
    select new { istb.service_id, ss.service_desc, selected = true };
var resultB =            
    from ss in setup_services 
    where !istb_services.Any(istb => 
        istb.service_id == ss.service_id &&
        istb.istb_id == 3)
    select new { ss.service_id, ss.service_desc, selected = false };
var result = resultA.Union(resultB);

具有相同字段的匿名类型初始值设定项应编译为相同的匿名类型,从而使这两个序列与Union操作兼容。