0
我有一个项目ID的列表playerIds
(他们来自Redis),我想通过NHibernate获得它们的对象(User
),但我写它的方式不是优化它的想法。如何在NHibernate中获得带ID的项目列表
这里是我的代码:
List<int> playerIds = redisRespnse.Select(x => int.Parse(x)).ToList();
using (var session = sessionFactory.OpenSession())
{
List<User> TopPlayers = new List<User>();
for (int i = 0; i < playerIds.Count; i++)
{
var player = session.Query<User>()
.Where(user => user.Id == playerIds[i])
.FirstOrDefault();
if (player != null)
{
TopPlayers.Add(player);
}
}
var finalResponse = new GetLeaderBoardResponse(TopPlayers);
return Ok(finalResponse);
}
感谢。
不NHibernate的支持'。载有()'方法?在EF6中,你可以做'var topPlayers = usersDbSet.Where(u => playerIds.Contains(u.Id))。ToArray();'。请注意,使用你的方法,你需要执行N个SQL查询,而不是1. –
它可以工作,但它是否被优化?,我不知道一个大的用户表。它应该遍历所有这些来找到答案。 – AminSojoudi
Afaik,'Contains'生成一个像这样的查询:“SELECT * FROM Users WHERE Id in {1,3,5,7,9 ...}”。它比你的方法更优化:)你可以剖析SQL并检查生成的查询。 –