我有三个类,Code
,CodeContact
和Contact
,它们映射到数据库中的表。在我的代码中,类有一个静态方法,它返回您在以下SQL脚本中找到的数据
create table #Contacts
(ContactId int
,Name varchar(50)
,Phone varchar(50)
)
insert into #Contacts(ContactId,Name,Phone)
values (1,'jon',111 )
,(2,'jim',222)
,(3,'james',333)
,(4,'john',444)
,(5,'tim',555)
,(6,'jane',666)
go
create table #ContactsCodes
(ContactId int
,CodeId int
)
insert into #ContactsCodes(ContactId,CodeId)
values (1,1 )
,(1,2 )
,(1,3 )
,(1,4 )
,(2,2 )
,(2,3 )
,(3,1 )
,(3,4 )
,(4,1 )
,(4,5 )
create table #Codes
(CodeId int
,CodeText varchar(50)
)
insert into #Codes
values (1,'Code Red' )
,(2,'Code Blue' )
,(3,'Code Green' )
,(4,'Code Gray' )
,(5,'Code Black' )
,(6,'code clear' )
我正在寻找一些关于如何获得LINQ代码以获得类似
之类的建议的建议declare @filter varchar(50) = (select 1)
select c.ContactId
,c.Name
,c.Phone
,case when varColumn.ContactId is null
then 'Not Present'
else 'Present' end as [Code Red]
,case when varColumn2.ContactId is null
then 'Not Present'
else 'Present' end as [Code Blue]
from Contacts as c
--****************end of 'cohort' base set of IDs
--first item in filter list becomes a
--column on a DataTable
left join
(
select distinct cc.ContactId
from Codes as codes
left join ContactsCodes as cc
on cc.CodeId = codes.CodeId
where codes.CodeId =@filter
) as varColumn on varColumn.ContactId = c.ContactId
--second item in filter becomes another column
left join
(
select distinct cc.ContactId
from Codes as codes
left join ContactsCodes as cc
on cc.CodeId = codes.CodeId
where codes.CodeId =@filter+1
) as varColumn2 on varColumn2.ContactId = c.ContactId
所以,假设我有一个IEnumerable,其中包含1,2,3。我想迭代集合并离开连接到Contact.ContactId
列,并简单地指示是否在ContactsCodes
表中找到了特定的CodeId。以下是运行上述SQL时的结果:
我最终需要在列数据上添加动态非常动态。但就目前而言,任何人都可以提供方向吗?我认为最简单的选择可能是使用LINQ to SQL路由并让左边的内容加入一个存储过程并为列表中的任何内容调用X次,但我欢迎任何建议。