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

时间:2014-10-13 10:06:01

标签: c# linq

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

所以 A 赋予 B ,然后 B 赋予 C C 给予 D 等,直到30天或者链中的用户没有给出任何东西。目前我可以完成前2个赠送,但我需要能够以某种方式将其包装在循环中

功能

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();

    }

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

1 个答案:

答案 0 :(得分:0)

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