<p>What is the difference between <strong><em>anonymous methods</em></strong> of C# 2.0 and <strong><em>lambda expressions</em></strong> of C# 3.0.?</p>

The MSDN page on anonymous methods explains it
In versions of C# before 2.0, the only
  way to declare a delegate was to use
  named methods. C# 2.0 introduced
  anonymous methods and in C# 3.0 and
  later, lambda expressions supersede
  anonymous methods as the preferred way
  to write inline code. However, the
  information about anonymous methods in
  this topic also applies to lambda
  expressions. There is one case in
  which an anonymous method provides
  functionality not found in lambda
  expressions. Anonymous methods enable
  you to omit the parameter list, and
  this means that an anonymous method
  can be converted to delegates with a
  variety of signatures. This is not
  possible with lambda expressions. For
  more information specifically about
  lambda expressions, see Lambda
  Expressions (C# Programming Guide).
And regarding lambda expressions
:
A lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.
  All lambda expressions use the lambda operator =>, which is read as "goes to". The left side of the lambda operator specifies the input parameters (if any) and the right side holds the expression or statement block. The lambda expression x => x * x is read "x goes to x times x." This expression can be assigned to a delegate type as follows: