Napisałem zapytanie Linq do CRM za pomocą dostawcy CRM 2011 RC (v5) LINQ-to-CRM. Mam lokalnie zadeklarowaną Listę <T>, którą chcę dołączyć do jednostki CRM i chcę, aby zapytanie zostało wykonane na serwerze CRM. Przykładem może pomóc:LINQ to Dynamics CRM Zapytanie o filtrowanie rekordów lokalnie
MyObject myObject = new MyObject();
List<myAccount> myAccountsList = new List<myAccount>();
myAccountsList.Add(new myAccount() {AccountNumber = "123"};
myAccountsList.Add(new myAccount() {AccountNumber = "456"};
myObject.ListOfAccounts = myAccountsList;
var accountsQuery = from ax in myObject.ListOfAccounts
join a in orgContext.CreateQuery<customAccountEntity>() on ax.AccountNumber equals a.account_number
select a;
foreach(var item in accountsQuery)
{
Console.WriteLine("Id of record retrieved: " + a.Id.ToString());
}
Powyższy kod kompiluje i wykonuje jednak filtrowanie rekordów odbywa się lokalnie po pobraniu całego podmiotu CRM rekordów. Oczywiście, gdy jednostka CRM zawiera tysiące wierszy, zapytanie będzie działało słabo, a nawet limit czasu.
Przeczytałem o IQueryable i IEnumerable i próbowałem konwertować listę przy użyciu metody rozszerzenia AsQueryable(), która nie przyniosła skutku. Potrzebuję mojego powyższego zapytania Linq do uruchomienia SQL w następujący sposób:
SELECT a.*
FROM customAccountEntity AS a
WHERE a.account_number IN ('123', '456');
Lub użycie tabeli tymczasowej, jeśli chcesz dołączyć do wielu pól. Jak mogę to zrobić?
jestem już przy użyciu dostawcy zapytań LINQ-CRM - Czy mogę używać więcej niż jednego dostawcy w tej samej kwerendy? – Iftekhar
Ok po przyjrzeniu się kwerendy, myślę, że powinieneś zrobić to na odwrót (bez łączenia, ale zawiera) – Guillaume86
Chcę, aby moje zapytanie zostało przetłumaczone na SQL i filtrowanie do uruchomienia na serwerze SQL. Metoda rozszerzenia Contains po prostu filtruje lokalnie. – Iftekhar