一文的基础上介绍如何自定义 Azure Table storage 的查询过滤条件。如果您还不太清楚 Azure Table storage 的基本用法,请先移步。
MyLogEntity( pkey,.PartitionKey =.RowKey =
}
TableQuery query = TableQuery,QueryComparisons.Equal, queryResult = logTable.ExecuteQuery(query);
,,));
“abc” == “abc” << “abca” << “abcz” < “abd”
startsWithCondition =,QueryComparisons.GreaterThanOrEqual,
"(RowKey ge ) and (RowKey lt )"
startStr = endIndex = startStr.Length - =
Char afterLastChar = ()(lastChar +
endStr = startStr.Substring(,endIndex) + startsWithCondition =
filterCondition =,
(PartitionKey eq ) and ((RowKey ge ) and (RowKey lt ))
MyLogEntity( pkey,.PartitionKey =.RowKey =><span style="color: #000000">
{
<span style="color: #0000ff">private <span style="color: #0000ff">readonly <span style="color: #0000ff">string<span style="color: #000000"> partitionKey;
<span style="color: #0000ff">private <span style="color: #0000ff">readonly <span style="color: #0000ff">string<span style="color: #000000"> startsWithString;
<span style="color: #0000ff">internal StartsWithByRowKey(<span style="color: #0000ff">string<span style="color: #000000"> partitionKey,<span style="color: #0000ff">string<span style="color: #000000"> startsWithString)
{
<span style="color: #0000ff">this.partitionKey =<span style="color: #000000"> partitionKey;
<span style="color: #0000ff">this.startsWithString =<span style="color: #000000"> startsWithString;
}
</span><span style="color: #0000ff">public</span> DateTime LogDate { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> LogMessage { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
</span><span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> ErrorType { <span style="color: #0000ff">get</span>; <span style="color: #0000ff">set</span><span style="color: #000000">; }
}
<span style="color: #0000ff">public <span style="color: #0000ff">class StartsWithByRowKey : IQuery<CloudTable,List{
<span style="color: #0000ff">private <span style="color: #0000ff">readonly <span style="color: #0000ff">string<span style="color: #000000"> startsWithString;
<span style="color: #0000ff">internal StartsWithByRowKey(<span style="color: #0000ff">string<span style="color: #000000"> partitionKey,<span style="color: #0000ff">string<span style="color: #000000"> startsWithString)
{
<span style="color: #0000ff">this.partitionKey =<span style="color: #000000"> partitionKey;
<span style="color: #0000ff">this.startsWithString =<span style="color: #000000"> startsWithString;
}
</span><span style="color: #0000ff">public</span> List<MyLogEntity><span style="color: #000000"> Execute(CloudTable coludTable)
{
</span><span style="color: #0000ff">var</span> query = <span style="color: #0000ff">new</span> TableQuery<MyLogEntity><span style="color: #000000">();
</span><span style="color: #0000ff">int</span> endIndex = startsWithString.Length - <span style="color: #800080">1</span><span style="color: #000000">;
Char lastChar </span>=<span style="color: #000000"> startsWithString[endIndex];
Char afterLastChar </span>= (<span style="color: #0000ff">char</span>)(lastChar + <span style="color: #800080">1</span><span style="color: #000000">);
</span><span style="color: #0000ff">string</span> endStr = startsWithString.Substring(<span style="color: #800080">0</span>,endIndex) +<span style="color: #000000"> afterLastChar;
</span><span style="color: #0000ff">string</span> startsWithCondition =<span style="color: #000000"> TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition(</span><span style="color: #800000">"</span><span style="color: #800000">RowKey</span><span style="color: #800000">"</span><span style="color: #000000">,startsWithString),endStr)
);
</span><span style="color: #0000ff">string</span> filterCondition =<span style="color: #000000"> TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition(</span><span style="color: #800000">"</span><span style="color: #800000">PartitionKey</span><span style="color: #800000">"</span><span style="color: #000000">,partitionKey),startsWithCondition
);
</span><span style="color: #0000ff">var</span> entities =<span style="color: #000000"> coludTable.ExecuteQuery(query.Where(filterCondition));
</span><span style="color: #0000ff">return</span><span style="color: #000000"> entities.ToList();
}
}
<span style="color: #0000ff">public <span style="color: #0000ff">interface IQuery<<span style="color: #0000ff">in TModel,<span style="color: #0000ff">out TResult><span style="color: #000000">
{
TResult Execute(TModel model);
}
StartsWithByRowKey myStartsWithQuery = StartsWithByRowKey(, result = myStartsWithQuery.Execute(logTable);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。