検索したいフィールドの組み合わせのリストがあります。リストには実際には最大 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)
データを取得する 1 つの可能な方法:
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を実行するしか考えられないのですが、できればそれは避けたいです。