読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

やべぇ便利だ。