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並檢查生成的查詢。 –