gpt4 book ai didi

c# - 带投影的 Azure 表存储查询是否可以仅返回投影列而不包含 PK 和 RK?

转载 作者:行者123 更新时间:2023-11-30 20:20:03 26 4
gpt4 key购买 nike

我正在编写一个 web.api Controller ,它通过投影查询 Azure 表存储表,并且需要返回投影列的 json 字符串。

结果返回投影,但还包括每个实体的基本属性 PK、RK、时间戳和 eTag。

我想向屏幕返回一个仅包含投影列的 json 字符串,但由于包含了基本属性,因此我必须在序列化为 Json 之前执行从每个实体中剥离基本属性的额外步骤。

有没有办法让查询只返回投影列?

这是我返回 TableQuery 的代码:

class Poco:TableEntity{
... Col1
... Col2
}


var rangeQuery = new TableQuery<Poco>().Where(filter).Select(new List<string>
{ "col1", "col2" });

var result = table.ExecuteQuery(rangeQuery).ToList();

下面是返回 DynamicTableEntity 的相同代码:

class Poco{
... Col1
... Col2
}


var rangeQuery = new TableQuery();
rangeQuery.Where(filter).Select(new List<string>
{ "col1", "col2" });

var result = table.ExecuteQuery(rangeQuery).ToList();

这些示例中的每一个都返回本质上相同的内容,但在反向结构中,TableQuery 返回 Poco 元素列表,但每个元素都包含一个“基本”属性,该属性包含所有基本属性。DynamicTableEntity 返回基本属性元素的列表,其中每个元素都包含一个“属性”属性,该属性包含投影列的数组。

最佳答案

您可以使用DynamicTableEntityEntityResolver查询来查询实体属性的子集,请参阅Query a subset of entity properties了解详情。

下面是从 azure 表中仅获取 NameSchool 的示例代码。

namespace ProjectedQuery
{
class Program
{
static void Main(string[] args)
{
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString"));

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the CloudTable object that represents the "stevens" table
CloudTable table = tableClient.GetTableReference("steventable");

// Construct the projectionQuery to get only "Name" and "School"
TableQuery<DynamicTableEntity> projectionQuery = new TableQuery<DynamicTableEntity>().Select(
new string[] { "Name", "School" });

// Define an entiy resolver to work with the entity after retrieval
EntityResolver<SimplePerson> resolver = (pk, rk, ts, props, etag) => new SimplePerson {
Name = props["Name"].StringValue,
School = props["School"].StringValue
};


foreach (SimplePerson projectedPerson in table.ExecuteQuery(projectionQuery, resolver, null, null))
{
Console.WriteLine("{0}\t{1}", projectedPerson.Name, projectedPerson.School);
}

Console.Read();
}
}
/// <summary>
/// The very properties I want to retrive
/// </summary>
class SimplePerson
{
public string Name { get; set; }
public string School { get; set; }
}

/// <summary>
/// The entity contains all the properties
/// </summary>
class PersonEntity:TableEntity
{
public string Name { get; set; }
public string City { get; set; }
public string School { get; set; }
}
}

结果如下:

enter image description here

关于c# - 带投影的 Azure 表存储查询是否可以仅返回投影列而不包含 PK 和 RK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37552411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com