Jon Skeetによる「奇妙なクエリ式」を読んだ後、以下のコードを試しました。最後にLINQクエリが変換されることを期待していましたが、が返されるint query = proxy.Where(x => x).Select(x => x);
ため、コンパイルされません。コードがコンパイルされ、「Where(x => x)」が画面に出力され、クエリが2に設定されます。Selectが呼び出されることはありませんが、コードをコンパイルするにはそこにある必要があります。何が起こっている?Where
int
using System;
using System.Linq.Expressions;
public class LinqProxy
{
public Func<Expression<Func<string,string>>,int> Select { get; set; }
public Func<Expression<Func<string,string>>,int> Where { get; set; }
}
class Test
{
static void Main()
{
LinqProxy proxy = new LinqProxy();
proxy.Select = exp =>
{
Console.WriteLine("Select({0})", exp);
return 1;
};
proxy.Where = exp =>
{
Console.WriteLine("Where({0})", exp);
return 2;
};
int query = from x in proxy
where x
select x;
}
}