使用动态标识符在linq中创建对象数组
本文关键字:创建对象 数组 linq 动态 标识符 | 更新日期: 2023-09-27 18:26:17
我需要根据过去30天的表格获得一系列对象。该表有一个播放用户、一个接收用户和点数。数组需要基于给接收用户的最高点,然后是给下一个接收用户的最高分,依此类推,持续30天。
因此,A给予B,然后B赋予C和C给D等等,直到30天结束或链中的用户没有给予任何东西。目前,我可以完成前两个给予,但我需要能够以某种方式将其包装在一个循环中
功能
public void CalRipple(UserDetail user)
{
var filterDate = DateTime.Now.AddDays(-30);
// First User
var firstUser = context.GamePlay.ToList()
.Where(_ => _.PlayingUserId == user.UserDetailId
&& _.PlayingDate >= filterDate)
.OrderByDescending(_ => _.points)
.Select(_ => new GamePlay{
Receiver = _.Receiver,
points = _.points
}).FirstOrDefault();
// Second User
var secondUser = context.GamePlay
.ToList()
.Where(_ => _.PlayingUserId == firstUser.Receiver.ReceivingUserId
&& _.PlayingDate >= filterDate)
.OrderByDescending(_ => _.points)
.Select(_ => new GamePlay {
Receiver = _.Receiver,
points = _.points
}).FirstOrDefault();
}
我不知道如何创建一个循环,以便循环的项目是上一个查询的用户结果。
var finished = false;
List<GamePlay> res = new List<GamePlay>();
var currentUser = firstUser;
while (!finished)
{
var nextUser = getBiggestGiveSinceDate(currentUser, res, filterDate);
if (nextUser == null)
{
finished = true;
}
else
{
res.Add(nextUser);
currentUser = nextUser;
}
}