[Azure] C# + Microsoft.Azure.Cosmos.Table v1+ Azure Storage Table - 多重條件查詢 資料
2021-01-11
之前幾篇文章,我們送了不少資料進去,今天我們來說一下如何查詢資料回來,當然因為 Azure Table 中,因為他價格不貴,但是限制還是有的,不然 CosmosDB 就不用賣了。
今天案例我只有針對數字搜,當然這概念有了其他搜尋都是一樣的堆加上去而已,我有一萬筆資料分別 Age 是從1 到 10000,裡面有一萬筆資料 我去搜尋當 Age >100 && Age <=200 的 資料回來,這裡面我只要求撈回 Age 欄位,當然其他的 PK, RK , ETag 基本的屬性都會跟著回來.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var tableClient = CloudStorageAccount.Parse(_ConnectionString).CreateCloudTableClient(new TableClientConfiguration()); | |
var table = tableClient.GetTableReference("table1"); | |
string pkFilter = new TableQuery<User>() | |
.Where(TableQuery.GenerateFilterCondition("PartitionKey", | |
QueryComparisons.Equal, "CLASSA")).FilterString; | |
string ageGreaterFilter = new TableQuery<User>() | |
.Where(TableQuery.GenerateFilterConditionForInt("Age", | |
QueryComparisons.GreaterThan, 100)).FilterString; | |
string ageLessequalFilter = new TableQuery<User>() | |
.Where(TableQuery.GenerateFilterConditionForInt("Age", | |
QueryComparisons.LessThanOrEqual, 200)).FilterString; | |
string combineAgeFilter = TableQuery.CombineFilters(ageGreaterFilter, TableOperators.And, ageLessequalFilter); | |
string combinePKAndAgeFilter = TableQuery.CombineFilters(pkFilter, TableOperators.And, combineAgeFilter); | |
TableQuery<User> query = new TableQuery<User>().Where(combinePKAndAgeFilter); | |
//只選擇固定欄位回來 | |
query.SelectColumns = new List<string>(); | |
query.SelectColumns.Add("Age"); | |
var entities = table.ExecuteQuery<User>(query); | |
Console.WriteLine("Search Age <=200 And > 100 Count :" + entities.Count()); | |
foreach (var data in entities) | |
{ | |
Console.Write(data.RowKey + ":" + data.Age + " ; "); | |
} | |
說難不難因為一開始我以為可以直接的下 .Where 直接使用 LINQ 但是測試結果是不行的,還是要透過拼湊的方式來做的,然後這裏面還有一些不支持的 LINQ 操作,像是 OrderBy ..詳細請看我下面附的連結。筆記一下,給之後需要的人..