如何编写LINQ查询以返回帐号不在列表中的所有帐户?
该列表将从excel文档中提取。
private bool GetAccounts()
{
List<String> accountIds = new List<String>();
accountIds.Add( "[unknown]");
var query = from accounts in context.AccountSet where !accountIds.Contains(accounts.AccountNumber) select accounts;
}
它不一定是列表。
修改
以上查询运行时会发生这种情况 - 这是CRM的错吗?
答案 0 :(得分:15)
我不相信你可以通过linq。以下是SDK中的where子句限制。
其中=&gt; 子句的左侧必须是属性名称,子句的右侧必须是值。您不能将左侧设置为常量。该子句的两个边都不能是常量。
支持String函数Contains,StartsWith,EndsWith和Equals。
您可以使用QueryExpression或FetchExpressions来解决这些限制。您想要的查询使用QueryExpression看起来像这样。我唯一要提的是,如果你期待很多记录(我相信5000+),你很可能也需要为你的功能实现分页。
private static IEnumerable<Account> GetAccounts(IOrganizationService proxy)
{
List<String> accountIds = new List<String>(new string[]{"654321", "12345"});
var results = proxy.RetrieveMultiple(new QueryExpression(Account.EntityLogicalName)
{
ColumnSet = new ColumnSet("accountid", "name", "accountnumber"),
Criteria = new FilterExpression()
{
Conditions = { new ConditionExpression("accountnumber", ConditionOperator.NotIn, accountIds) }
}
});
return results.Entities.Select(x=> x.ToEntity<Account>());
}