使用动态标识符在linq中创建对象数组

本文关键字:创建对象 数组 linq 动态 标识符 | 更新日期: 2023-09-27 18:26:17

我需要根据过去30天的表格获得一系列对象。该表有一个播放用户、一个接收用户和点数。数组需要基于给接收用户的最高点,然后是给下一个接收用户的最高分,依此类推,持续30天。

因此,A给予B,然后B赋予CCD等等,直到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();
    }

我不知道如何创建一个循环,以便循环的项目是上一个查询的用户结果。

使用动态标识符在linq中创建对象数组

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;
            }
        }