以编程方式从Azure表存储获取所有列名的完整列表

wfsdck30  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(136)

我正在编写一个门户网站与Azure接口。
我要提取并显示Azure表存储(nosql)的内容
我正在使用:

CloudTable table = TableClient.GetTableReference(tableName);
IEnumerable<DynamicTableEntity> results = table.ExecuteQuery(new TableQuery());

这将获取表和实体。

每个传回的DynamicTableEntity只会列出具有值的属性。如果没有所有数据表属性的清单,会让在检视上显示数据变得很麻烦。
是否有一种方法可以使用Microsoft.WindowsAzure.Storage以编程方式获取表的所有列名。

zrfyljdw

zrfyljdw1#

在Azure存储中,表将数据存储为实体集合。实体具有主键和一组属性。但是,表服务不对表强制实施任何架构,因此同一表中的两个实体可能具有不同的属性集。
因此,如果客户端应用程序不强制实施架构,就没有简单的方法来查询表中所有实体的所有属性的并集。

mwkjh3gx

mwkjh3gx2#

我已经做了下面的自定义逻辑,它对我来说工作得很好

public static async Task Main(string[] args)
        {
            List<string> properties = new List<string>();
            var acc = new CloudStorageAccount(
                         new StorageCredentials("YOUR STORAGE ACCOUNT NAME", "YOUR STORAGE ACCOUNT CONNECTION STRING"), true);
            var tableClient = acc.CreateCloudTableClient();
            CloudTable table = tableClient.GetTableReference("YOUR TABLE NAME");
            IEnumerable<DynamicTableEntity> results = table.ExecuteQuery(new TableQuery());
            foreach (var item in results)     
            {
                if(item.Properties != null && item.Properties.Count > 0)
                {
                    foreach(var property in item.Properties)
                    {
                        if(properties != null && properties.Count > 0)
                        {
                            string s1 = property.Key.ToString();
                            if(!properties.Contains(s1))
                            {
                                properties.Add(s1);
                            }
                        }
                        else
                        {
                            string s2 = property.Key.ToString();
                            properties.Add(s2);
                        } 
                    }
                }
            }
            if(properties != null && properties.Count > 0)
            {
                foreach(var item in properties)
                {
                    Console.WriteLine(item.ToString());
                }    
            }

分区键、行键和时间戳是所有表的通用属性,您可以在创建列表时默认添加这些属性

相关问题