Lambda expressions and anonymous methods on Metadata service in CRM 4.0

In C# 3.0 Microsoft has added lambda expression. This is not a new feature in computer languages originally designed on a conceptualized level way back in time by an American called Alonzo Church.

Lamda expressions provide shorthand syntax for algorithms.

I have played around with this and below is a simple example where I retrieve all entities from the CRM metadata service. I call my filter method and provide my delegate with the filter expression. I have also an example on using anonym’s method, in previous versions before 2.0 you had to write a named method and pass that name where the delegate was required. The syntax for C# operator is => and lambda expression. Example is simple and I'm only using one param1 (filter) and checks if entity is customizable.

static void Main(string[] args)

{

//Login and retrive all entities from metadataservice (change name to your org)

RetrieveAllEntitiesResponse allEntitiesResponse = Metadata.RetriveAll("mydemo");

//Lambda expression

EntityMetadata[] filterEntities = Common.FilterMetadata(allEntitiesResponse,

filter => (filter.IsCustomizable.Value == true)

);

/*

//Anonymous method

EntityMetadata[] filterEntities = Common.FilterMetadata(allEntitiesResponse,

delegate(EntityMetadata filter)

{

return (filter.IsCustomizable.Value == false);

});

*/

//Write result to console

int total = 0;

foreach (EntityMetadata item in filterEntities)

{

Console.WriteLine(item.SchemaName);

total++;

}

Console.WriteLine("Return of record(s) {0}", total);

Console.ReadKey();

}

 

If your filter is complex you might consider to create a named method.

I have attached Visual Studio 2008 project for you to play around with.

Lambda on MSDN

This posting is provided "AS IS" with no warranties, and confers no rights.

 

LambdaExample.zip