かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azure WebJobsでテーブルからデータを読み込む

テーブルストレージに書き込む方法はやったので次は読み込みをやってみたいと思います。 テーブルからデータを読み込むには、Table属性のついたIQueryableを引数に受け取ります。 このIQueryableにクエリを発行することで、テーブルからデータを取ってこれます。

コードはこんな感じ。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using System.Configuration;
using Microsoft.WindowsAzure.Storage.Table;

namespace HelloWorld
{
    public class Functions
    {
        // This function will get triggered/executed when a new message is written 
        // on an Azure Queue called queue.
        public static void ProcessQueueMessage([QueueTrigger("queue")] string message, [Table("sample")] ICollector<Person> sample)
        {
            // 前回のコードなので省略
        }

        // テーブルの読み込み
        public static void ReadTableDatas(
            [QueueTrigger("readtablequeue")] string message, 
            [Table("sample")] IQueryable<Person> query, 
            TextWriter log)
        {
            foreach(var p in query.Where(x => x.PartitionKey == message))
            {
                log.WriteLine(p.Name);
            }
        }
    }

    public class Person : TableEntity
    {
        public string Name { get; set; }
    }
}

readtablequeueに対してメッセージを投げると、そのPartitionKeyのNameをログに吐き出します。

f:id:okazuki:20160204161959p:plain

やべぇ便利だ。