我使用 CRM 2011 RC (v5) LINQ-to-CRM 提供程序编写了一个 Linq to CRM 查询。我有一个本地声明的 List<T> 我想加入 CRM 实体,我希望在 CRM 服务器上执行查询。一个例子可能会有所帮助:
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());
}
上面的代码编译并执行,但是,在检索整个 CRM 实体记录集后,记录的过滤正在本地执行。显然,当 CRM 实体包含数千行时,查询将执行不佳甚至超时。
我已阅读有关 IQueryable 和 IEnumerable 的信息,并尝试使用 AsQueryable() 扩展方法转换列表,但没有效果。我需要上面的 Linq 查询来运行 SQL,如下所示:
SELECT a.*
FROM customAccountEntity AS a
WHERE a.account_number IN ('123', '456');
如果想加入多个字段,或者使用临时表。我怎样才能做到这一点?