0
アイテムIDのリストを持っていますplayerIds
(彼らはRedisから来ています)、私はNHibernateを通してそれらのオブジェクト(User
)を取得したいと思いますが、それは最適だと思う。NHibernateでidsを持つアイテムのリストを取得する方法
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のサポート '.Contains()'メソッドをサポートしていますか? EF6では 'var topPlayers = usersDbSet.Where(u => playerIds.Contains(u.Id))。ToArray();'を実行できます。あなたのアプローチでは、1の代わりにN SQLクエリを行うことに注意してください。 –
それは動作しますが、それは最適化されていますか?私は 'Users'の大きなテーブルを知りません。答えを見つけるためにすべてを繰り返してください。 – AminSojoudi
Afaik、 'Contains'は、" SELECT * FROM Users {1、3、5、7、9 ...} "のようなクエリを生成します。あなたのアプローチよりはるかに最適化されています:) SQLをプロファイリングし、生成されたクエリをチェックすることができます。 –