实体框架核心IN等同于列表

时间:2017-05-29 22:57:13

标签: c# mysql entity-framework-core

我看过:Entity Framework Core - IN clause equivalent

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

我有IEnumerable<PlayerRank> rankings,我正在尝试从表中选择与PlayerRankDatePlayer匹配的所有World在我的清单中。

这是我能想到的最好的:

_context.PlayerRankings.Where(p => rankings.Any(k =>
                            k.Date == p.Date &&
                            k.Player == p.Player &&
                            k.World == p.World));

这最终会执行相当于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)
)

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

我正在使用MySQL和Pomelo连接器。日期,播放器和&amp;世界是一个独特的指数。

0 个答案:

没有答案