我看过:Entity Framework Core - IN clause equivalent
我正在尝试生成类似于上述帖子的查询,但是我没有匹配单个ID,而是有一个对象数组。我试图从上下文中选择与我的对象列表中匹配的所有匹配实体。
我有IEnumerable<PlayerRank> rankings
,我正在尝试从表中选择与PlayerRank
,Date
和Player
匹配的所有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;世界是一个独特的指数。