Entity Framework Core IN 等效于列表

Dou*_*ell 5 c# mysql entity-framework-core

我已阅读:Entity Framework Core - IN 子句等效

我正在尝试生成一个类似于上述帖子的查询,但我没有匹配单个 ID,而是有一个对象数组。我试图从与我的对象列表中的实体相匹配的上下文中选择所有匹配的实体。

我有一个IEnumerable<PlayerRank> rankings和我想选择所有PlayerRank从匹配的表信息系统S DatePlayerWorld那些在我的名单。

这是我能想到的最好的:

_context.PlayerRankings.Where(p => rankings.Any(k =>
                            k.Date == p.Date &&
                            k.Player == p.Player &&
                            k.World == p.World));
Run Code Online (Sandbox Code Playgroud)

这最终会执行相当于SELECT * FROM查询的操作,并将整个表拉入内存,然后根据我的rankings列表对其进行过滤。该表有几百万行长,这在性能方面非常糟糕。

SQL 可能看起来像的示例:

SELECT * FROM db.player_rankings
WHERE (date, player, world) IN (
    ('2017-01-18', 'Player1', 6),
    ('2017-01-18', 'Player2', 6),
    ('2017-01-18', 'Player3', 6),
    ('2017-01-18', 'Player4', 6),
    ('2017-01-18', 'Player5', 6)
)
Run Code Online (Sandbox Code Playgroud)

如何使用 Fluent API 生成WHERE IN语句以匹配我的PlayerRanks列表?

我正在使用 MySQL 和 Pomelo 连接器。日期、玩家和世界是表上的唯一索引。