我在网上搜索,但没有找到任何解决方案。请帮助我解决这个问题。
问题:我有一个带有azure表存储的webapi,当我查询azure表时,包含partitionkey和rowkey的webapi json响应。 我希望使用azure table的partitionkey和rowkey排除我的web api响应。
当前输出: {"分区键":"测试"," Rowkey":" abc&# 34; ,"名称":"用户""电子邮件":" test@test.com",&#34结构域":" QWE"}
预期输出 {"名称":"用户""电子邮件":" test@test.com","结构域&#34 ;: " QWE"}
答案 0 :(得分:1)
当我查询azure表时,webapi json响应包含在partitionkey和rowkey中。我希望我的web api响应排除在azure表的partitionkey和rowkey之外。
您可以尝试使用查询投影从实体中返回一组有限的属性,同时从Azure表存储中选择实体。以下查询供您参考。
TableQuery<EmployeeEntity> EmpQuery = table.CreateQuery<EmployeeEntity>();
var query = (from ep in EmpQuery
where ep.PartitionKey == "pkvalue" && ep.RowKey== "rkvalue"
select new { Fname = ep.FirstName, Lname = ep.LastName}).AsTableQuery();
var emps = query.Execute();
答案 1 :(得分:1)
您可以使用SelectColumns类中的属性TableQuery来指定要从Azure存储表服务中查询的列。
答案 2 :(得分:0)
从结果中排除PartitionKey和RowKey的关键是将TableRequestOptions的 ProjectSystemProperties 设置为 false 。
所以上面的代码应该像这样修改:
var emps = query.Execute(new TableRequestOptions { ProjectSystemProperties = false });
另一个工作示例:
var query = new TableQuery<Event>()
.Where(
TableQuery.GenerateFilterCondition(
"PartitionKey", QueryComparisons.Equal, partitionKey))
.Select(new[] { "Id" });
var results = table.ExecuteQuery(query,
new TableRequestOptions { ProjectSystemProperties = false });
然后你会得到这样的回应:
{"odata.etag":"W/\"datetime'2017-10-27T08%3A05%3A40.6551979Z'\"","Id":"Event-1" },
{"odata.etag":"W/\"datetime'2017-10-27T09%3A05%3A40.6551979Z'\"","Id":"Event-2" },
...
要避免在结果中使用odata.etag,请在TableRequestOptions中指定PayloadFormat并获得您想要的内容:
var results = table.ExecuteQuery(query,
new TableRequestOptions {
ProjectSystemProperties = false,
PayloadFormat = TablePayloadFormat.JsonNoMetadata
});
结果:
{ "Id":"Event-1" },{ "Id":"Event-2" },...