Udostępnij za pośrednictwem


Use LINQ to access CRM objects

If you have written small console application to check some data from CRM database you have probably already read this article from MSDN: Use Filtered Views. That is okay but honestly I’m currently more into LINQ solution. I’ll show you what I mean...

First I'll create new Console Application project and Add New Item to it and select LINQ to SQL Classes and name it CRMDataClasses.dbml:
LINQDataClasses

Then I'll use Server Explorer to connect to CRM database:
ServerExplorer

And then I'll drag Account, Contact, FilteredAccount and FilteredContact to the canvas of our newly created CRMDataClasses.dbml: CRMDataClasses

Now I'm ready to use LINQ to these views:

 12345678910111213141516171819202122
 CRMDataClassesDataContext dataContext = new CRMDataClassesDataContext();var queryContact = from contact in dataContext.Contacts          where contact.MobilePhone.Length > 0 &&          contact.LastName.Length > 0    select contact;Console.WriteLine("Contact(s):");foreach (Contact c in queryContact){  Console.WriteLine(c.FirstName + " " + c.LastName + ", " + c.MobilePhone);}var queryFilteredContact = from contact in dataContext.FilteredContacts          select contact;Console.WriteLine("");Console.WriteLine("Filtered contact(s):");foreach (FilteredContact c in queryFilteredContact){  Console.WriteLine(c.lastname);}

On lines 3 to 6 I queried all contacts that have lastname and mobilephone filled in. On lines 14 to 15 I'm querying all contacts where current user has access to. NOTE: It doesn't return anything if you use SQL Authentication! So both of these can be used to fill you applications needs. But do notice that for some reason the attributes at the FilteredContacts are all lower case and in Contacts their naming is a bit different. So if you plan to change from Contacts to FilteredContact your going to have to change the casing of the attributes little bit.

This was just quick advice how you can leverage LINQ to your CRM solutions.

Anyways... Happy hacking!

J

Comments

  • Anonymous
    August 29, 2008
    PingBack from http://blog.a-foton.ru/2008/08/use-linq-to-access-crm-objects/

  • Anonymous
    August 29, 2008
    Some great information. Many Thanks

  • Anonymous
    December 10, 2008
    You can also use LinqtoCRM, a free LINQ query provider for the CRM web service: http://www.codeplex.com/LINQtoCRM

  • Anonymous
    February 21, 2009
    Another option is XrmLinq, works exactly like LINQ to SQL, generates code based on the CRM metadata, uses queryexpressions internally.

  • Anonymous
    April 10, 2009
    FWIW, I don't know if I'd use this method.  Updating data directly in the CRM database is not supported by Microsoft, but it also doesn't offer the extensibiltiy of the other options (LinqToCRM or XRMLinq).  For instance, updating an etnity using the LINQ to SQL classes doesn't fire the relevant plug-ins...