Linq:我如何获得 object 的值

Linq: how i get the value of an object

问题:

我尝试映射从日期“x”开始的所有更新工作日志问题。 jira API 仅支持 1000 个元素: Jira API

现在我想得到最后一个的值x.Until

Debugger Screenshot

但值仍然是:"System.Linq.Enumerable+SelectListIterator`2[TempusDraft.tmpUpdatedWorklog,System.UInt64]"

大富克?为什么?我看不出我的错误。

我如何获得正确的值(看图片)?

非常感谢,祝您身体健康!

类:

class tmpUpdatedWorklog
{  
    [JsonPropertyName("values")]
    public List<worklog> Values { get; set; }

    [JsonPropertyName("since")]
    public ulong Since { get; set; }
        
    [JsonPropertyName("until")]
    public ulong Until { get; set; }
    
    [JsonPropertyName("lastPage")]
    public bool LastPage { get; set; }

    public class worklog
    {
        [JsonPropertyName("worklogId")]
        public long Id { get; set; }

        [JsonPropertyName("updatedTime")]
        public long updatedTime { get; set; }
    }
}

class tmpWorklogRequestModel
{
        [JsonPropertyName("ids")]
        public List<long> Ids { get; set; }
}

方法:

private static async Task<List<tmpUpdatedWorklog>> GetUpdatedWorklogs(HttpClient client, List<tmpUpdatedWorklog> tmpUpdatedWorklogs)
        {
            var stream = await client.GetStreamAsync($"{JIRA_BASE_URL}worklog/updated?since={DateTimeOffset.UtcNow.AddYears(-2).ToUnixTimeMilliseconds()}");
            var result = await JsonSerializer.DeserializeAsync<tmpUpdatedWorklog>(stream);
            tmpUpdatedWorklogs.Add(result);
            return tmpUpdatedWorklogs;
        }

private static async Task<List<tmpUpdatedWorklog>> GetUpdatedWorklogs(HttpClient client, List<tmpUpdatedWorklog> tmpUpdatedWorklogs, string since)
        {
            Console.WriteLine(since.ToString());
            var stream = await client.GetStreamAsync($"{JIRA_BASE_URL}worklog/updated?since={since}");
            var result = await JsonSerializer.DeserializeAsync<tmpUpdatedWorklog>(stream);
            tmpUpdatedWorklogs.Add(result);
            return tmpUpdatedWorklogs;
        }

使用:

// other stuff before

private static readonly string JIRA_BASE_URL = "[link]";

static async Task Main(string[] args)
{
    using (HttpClient client = new HttpClient())
    {
        // other stuff before
        List<tmpUpdatedWorklog> tmpUpdatedWorklogs = new List<tmpUpdatedWorklog>();
        var results = await GetUpdatedWorklogs(client, tmpUpdatedWorklogs);
                
        while (!results.Select(x => x.LastPage).Contains(true)) 
        {
             // this doesn't work:
             // looks like: {JIRA_BASE_URL}worklog/updated?since=System.Linq.Enumerable+SelectListIterator`2[TempusDraft.tmpUpdatedWorklog,System.UInt64]
             results = await GetUpdatedWorklogs(client, tmpUpdatedWorklogs, results.Select(x => x.Until).ToString());
        }
        // other stuff
    }
}

您正在对 Select 语句返回的 IEnumerable 调用 ToString()。如果我正确理解你的应用程序逻辑(我不知道 Jira API),你应该替换

while (!results.Select(x => x.LastPage).Contains(true)) 
{
         // this doesn't work:
         // looks like: {JIRA_BASE_URL}worklog/updated?since=System.Linq.Enumerable+SelectListIterator`2[TempusDraft.tmpUpdatedWorklog,System.UInt64]
         results = await GetUpdatedWorklogs(client, tmpUpdatedWorklogs, results.Select(x => x.Until).ToString());
}

类似

while (!results.Select(x => x.LastPage).Contains(true)) 
{
         // this doesn't work:
         // looks like: {JIRA_BASE_URL}worklog/updated?since=System.Linq.Enumerable+SelectListIterator`2[TempusDraft.tmpUpdatedWorklog,System.UInt64]
         results = await GetUpdatedWorklogs(client, tmpUpdatedWorklogs, results.Select(x => x.Until).Last().ToString());
}

(唯一不同的是最后的Last-statement。)