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

謎言語使いの徒然

適当に気になった技術や言語を流すブログ。

ExpressionTree 抜きで動的にLINQの Where を指定するよう試す。

C# .NET

LINQ to SQL では使えないけど、一応手といえば手。
だってExpressionTreeとか弄るのヤだもん。俺、、、、
やってることは、匿名デリゲートを作ってWhereに突っ込んでるだけです。
で、匿名デリゲートを動的にポンポン作れば、動的なフィルタの出来上がり〜。
実装が汚いとか受け付けないw

class UserData
{
    public string user_name { get; set; }
    public int user_age { get; set; }
    public string user_mail { get; set; }
}

class Program
{
    delegate bool UserDelegate(UserData data);

    static void Main(string[] args)
    {
        UserData[] datas = new UserData[50];
        for (int i = 0; i < 50; i++)
        {
            datas[i] = new UserData()
            {
                user_name = "User" + i.ToString(),
                user_age = i,
                user_mail = "white-azalea.net"
            };
        }


        var query = from p in datas
                    where p.user_age > 10 && p.user_age < 30
                    select p;
        query = query.Where(p => getAzaleaDelegate()(p));

        foreach (UserData data in query)
        {
            Console.WriteLine(data.user_name);
        }
    }

    static UserDelegate getAzaleaDelegate()
    {
        return delegate(UserData data) { return data.user_mail == "white-azalea.net"; };
    }
}