我有一个要搜索的字段组合列表。该列表实际上可以包含多达 100 个项目,我正在查询的表此时有超过 100 万条记录。
一个例子:
create table mytable
(
foo int not null
,bar int not null
,baz int not null
)
insert into
mytable
values
(1, 1, 11)
,(1, 2, 12)
,(1, 3, 13)
,(2, 1, 21)
,(2, 2, 22)
,(2, 3, 23)
,(3, 1, 31)
,(3, 2, 32)
,(3, 3, 33)
检索数据的一种可能方法:
select
foo
,bar
,baz
from
mytable
where
(foo = 1 and bar = 3)
or (foo = 2 and bar = 1)
or (foo = 3 and bar = 2)
另一种可能的方式:
declare @filtercombos table
(
foo int not null
,bar int not null
)
insert into
@filtercombos
values
(1, 3)
,(2, 1)
,(3, 2)
select
mytable.foo
,mytable.bar
,mytable.baz
from
@filtercombos fc
left join mytable on mytable.foo = fc.foo and mytable.bar = fc.bar
两者都将返回此数据:
foo bar baz
----------- ----------- -----------
1 3 13
2 1 21
3 2 32
现在,如果这是一个单一值列表,我可以这样做.Where(item => myList.Contains(item.foo))
。如何进行上述查询?我唯一能想到的就是在 DbContext 上执行 SQL,但如果可能的话,我想避免这种情况。