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。)
问题:
我尝试映射从日期“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。)