开发者

How the C# compiler treats query expressions ?(Dotnet 3.5, C#3.0)

Going thru 开发者_JAVA技巧one of my favourite authors question What’s the hardest or most misunderstood aspect of LINQ? I am basically looking for the answer of the question:

How the C# compiler treats query expressions

Thanks


The compiler will evaluate and transform your query expressions into the equivalent lambda syntax before compiling the code further. So code that starts as

 var query = from foo in foos 
             where foo.Bar == someString
             select new 
             {
                 Baz = foo.Baz,
                 Id = foo.Id
             };

Will be transformed into the lambda version

 var query = foos.Where(f => f.Bar == someString).Select(f => new { Baz = f.Baz, Id = f.Id });

The same will happen to your complicated joins, groupings, etc.


The answer may vary between underlying LINQ providers.

Generally speaking, LINQ query expressions or method chains are transformed into Expression Tree before it goes to provider-specific implementation.

As for LINQ to Objects (IEnumerable), the expression tree is complied into a set of System.Func or System.Action delegates.

As for LINQ to SQL (IQueryable), the expression tree is transformed into T-SQL Statements.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜