C# 使用azure函数从azure存储表检索数据

C# 使用azure函数从azure存储表检索数据,c#,azure-storage,azure-functions,C#,Azure Storage,Azure Functions,我正在尝试使用Azure函数从Azure存储表中检索特定列数据。我正在使用table.ExecuteAsync(TableOperation.Retrieve())方法,但我不知道我所做的是否正确 static async Task<TableResult> GetAllMessages(CloudTable table, String InvocationName) { TableResult x = await table.ExecuteAsync(TableOper

我正在尝试使用Azure函数从Azure存储表中检索特定列数据。我正在使用table.ExecuteAsync(TableOperation.Retrieve())方法,但我不知道我所做的是否正确

static async Task<TableResult>  GetAllMessages(CloudTable table, String InvocationName)
{

    TableResult x = await table.ExecuteAsync(TableOperation.Retrieve(InvocationName,"1" ));    
    return x;
}

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route =null)] HttpRequest req,ILogger log)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
    CloudTable table = tableClient.GetTableReference("models");
    var x = await GetAllMessages(table, "InvocationName");
}
静态异步任务GetAllMessages(CloudTable表,字符串调用名称)
{
TableResult x=wait table.ExecuteAsync(TableOperation.Retrieve(调用名称,“1”));
返回x;
}
公共静态异步任务运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ILogger日志)
{
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient=storageAccount.CreateCloudTableClient();
CloudTable=tableClient.GetTableReference(“模型”);
var x=等待GetAllMessages(表“调用名称”);
}

Azure函数支持Azure表绑定。您可以使用它来读取或插入表。您可以从此处获取详细信息:

如果您想读取多个表行,则需要使用
IQueryable
,这是官方文档中的

public class TableStorage
{
    public class MyPoco : TableEntity
    {
        public string Text { get; set; }
    }

    [FunctionName("TableInput")]
    public static void TableInput(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "MyPartition")] IQueryable<MyPoco> pocos, 
        ILogger log)
    {
        foreach (MyPoco poco in pocos)
        {
            log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
        }
    }
}
公共类表存储
{
公共类MyPoco:TableEntity
{
公共字符串文本{get;set;}
}
[函数名(“TableInput”)]
公共静态输入(
[QueueTrigger(“表项”)]字符串输入,
[表(“MyTable”、“MyPartition”)]IQueryable POCO,
ILogger日志)
{
foreach(MyPoco-poco-in-pocos)
{
log.LogInformation($“PK={poco.PartitionKey},RK={poco.RowKey},Text={poco.Text}”);
}
}
}

所以我需要创建一个类来扩展TableEntity,并在该类中包含我的表列

class model : TableEntity{
    public string Name { get; set; }
    public override string ToString(){
     return  " " + Name;
    }
}
static async Task<TableResult>  GetAllMessages(CloudTable table, String InvocationName)
{

    TableResult x = await table.ExecuteAsync(TableOperation.Retrieve(InvocationName,"1" ));    
    return x;
}

public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route =null)] HttpRequest req,ILogger log)
{
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
    CloudTable table = tableClient.GetTableReference("models");
    var x = await GetAllMessages(table, "InvocationName");
    string url = ((model)x.Result).ToString();
}
类模型:TableEntity{
公共字符串名称{get;set;}
公共重写字符串ToString(){
返回“”+名称;
}
}
静态异步任务GetAllMessages(CloudTable表,字符串调用名称)
{
TableResult x=wait table.ExecuteAsync(TableOperation.Retrieve(调用名称,“1”));
返回x;
}
公共静态异步任务运行([HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequest请求,ILogger日志)
{
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient=storageAccount.CreateCloudTableClient();
CloudTable=tableClient.GetTableReference(“模型”);
var x=等待GetAllMessages(表“调用名称”);
字符串url=((model)x.Result).ToString();
}

您想根据某些条件检索此数据还是提取整个列?基于
PartitionKey、RowKey
从表中检索单行,并且
selectedColumns
的重载允许您仅投影特定列。如果要从表或分区检索所有行,则需要注意IQueryable对于V2运行时函数不可用@george请注意v2不支持iqueryable