2

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

4

3 に答える 3

0

別のリストに組み合わせのリストが既にある場合は、次のようなことができます。

var query = from m in Context.mytables
    select m;

foreach (var foobar in foobars)
{
    query = query.Where(x => x.foo == foobar.foo && x.bar == foobar.bar);
}

return query.ToList();
于 2013-06-11T14:45:38.697 に答える
0

または、この質問の回答に似たものが役立つ場合があります。

Entity Framework - リストに参加する

于 2013-06-11T14:47:51.817 に答える