为了账号安全,请及时绑定邮箱和手机立即绑定

您可以使用原始 graphQL 语法使用 octokit.net 库在 C# 中查询

您可以使用原始 graphQL 语法使用 octokit.net 库在 C# 中查询

C#
郎朗坤 2023-09-16 19:59:35
我正在尝试使用 graphQL 来查询存储库及其内容,但无法弄清楚如何在 LinQ 中构建所需的查询。有什么方法可以执行原始 GraphQL 查询而不使用 LinQ 语法吗?我的函数GraphQL查询如下所示:{  repositoryOwner(login: "userLogin") {    repositories(first: 99) {      nodes {        name        rootFolder: object(expression: "master:") {          id          ... on Tree {            entries {              name              object {                ... on Blob {                  byteSize                }              }            }          }        }      }    }  }}使用LinQ语法我得到了这一点:var query = new Query()   .RepositoryOwner("userLogin")   .Repositories(first: 99)   .Nodes.Select(repo => new   {       repo.Name   }).Compile();var result = await connection.Run(query);我找不到在 Blob 选择器上实现这些的方法编辑:Cyril Durand的答案有效,但不幸的是没有使用 Octokit.net 客户端,因此您无法将结果解析为上述库中包含的类。您可以做的是创建自定义类以完全适合 json 结果。首先你查询数据。var result = await Connection.PostQueryAsync(@"{    user(login: """ + userName + @""") {      login      avatarUrl    }   }");然后将其设为 JSON 字符串。(需要Newtonsoft.Json库)string JsonString = result.Data.user.ToString(Formatting.None);并且您使用json2csharp转换器,它使用 JSON 字符串中的属性创建精确的类。对于此查询,生成的类如下所示class User{    public string login { get; set; }    public string avatarUrl { get; set; }}现在您可以使用您的数据。这种方法不是最好的,但解决了我的大部分查询问题,因此我将其标记为正确答案。如果您有更好的解决方案的想法(也许您可以实际使用 octokit 库),请随时回答:)
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您可以使用GraphQl.Clientnuget 包并使用原始 graphql 查询:

var client = new GraphQLClient("https://api.github.com/graphql");

client.DefaultRequestHeaders.Add("Authorization", $"bearer {token}");

client.DefaultRequestHeaders.Add("User-Agent", userLogin );

var result = await client.PostQueryAsync(@"{

  repositoryOwner(login: """ + userLogin + @""") {

    repositories(first: 99) {

      nodes {

        name

        rootFolder: object(expression: ""master:"") {

          id

          ... on Tree {

            entries {

              name

              object {

                ... on Blob {

                  byteSize

                }

              }

            }

          }

        }

      }

    }

  }

}");

然后使用类似的方法访问结果:


var size = result.Data.repositoryOwner.repositories.nodes[0].rootFolder.entries[0].@object.byteSize;



查看完整回答
反对 回复 2023-09-16
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信