У меня не настроен CRM для проверки, является ли это ограничением их провайдера, но не могли бы вы попробовать следующее:
Dim MyVar = From a In svcContext.AccountSet _
Where a.Name.Contains("c") _
Join c In svcContext.ContactSet On a.PrimaryContactId.Id Equals c.ContactId _
Join l In svcContext.LeadSet On a.OriginatingLeadId.Id Equals l.LeadId _
Select c.FullName
Пара комментариев: в отличие от TSQL, порядок операций в LINQ более гибкий. Таким образом, вы можете ограничить свою первую таблицу перед выполнением объединения (в зависимости от того, как это переводится поставщиком CRM).
Во-вторых, вы хотите знать, где "c" находится где-нибудь в названии или только в начале? Если в начале, рассмотрим Where a.Name.StartsWith("c")
Еще один комментарий, в вашей проекции Select, вы без необходимости проецируете в перечислимый класс. Если вы просто проецируете одно значение, вам не нужны дополнительные издержки класса. Затем на вашем foreach просто выполните Debug.Print (MyItem), потому что MyItem - это полное имя. Также в VB при использовании синтаксиса запроса вам не нужно New With {...}. Если вы хотите проецировать анонимный тип с несколькими столбцами, вы можете сделать следующее в VB так же, как в SQL:
Dim query = From c In Customers
Select C.FullName, C.CompanyName