在CRM 2011中,我可以使用EarlyBoundEntities执行常规的创建,更新,删除操作。但是,我似乎无法找到使用相同类型的代码检索实体列表的示例。有没有办法使用EarlyBoundEntities检索类型的项目列表?
我查看了MSDN,如果我已经知道它的GUID,我可以找到的是如何检索实体。
// Retrieve the account containing several of its attributes.
ColumnSet cols = new ColumnSet(
new String[] { "name", "address1_postalcode", "lastusedincampaign" });
Account retrievedAccount = (Account)_service.Retrieve("account", _accountId, cols);
Console.Write("retrieved, ");
我如何获得没有电话号码的所有帐户的列表?
答案 0 :(得分:6)
如果您使用servicecontextname参数生成了早期绑定的代理类,则可以使用LINQ进行查询。
var context = new XrmServiceContext(service);
var accounts = context.AccountSet.Where(item => item.Telephone1 == null);
否则,如果您仍想使用其他查询方法(如QueryExpression),则可以使用LINQ将所有实例强制转换为所需的早期绑定类型。
var contacts = service.RetrieveMultiple(new QueryExpression
{
EntityName = "contact",
ColumnSet = new ColumnSet("firstname")
})
.Entities
.Select(item => item.ToEntity<Contact>());
如果您愿意,也可以使用扩展方法:
public static IEnumerable<T> RetrieveMultiple<T>(this IOrganizationService service, QueryBase query) where T : Entity
{
return service.RetrieveMultiple(query)
.Entities
.Select(item => item.ToEntity<T>());
}
用法:
var contacts = service.RetrieveMultiple<Contact>(new QueryExpression
{
EntityName = "contact",
ColumnSet = new ColumnSet("firstname")
});
答案 1 :(得分:1)
MSDN上的SDK实际上有很多材料可以显示如何查询实体。
Create Queries to Retrieve Data
Build Queries with LINQ - 主要是早期约束的例子
API提供了三种或多或少相同的方式来查询数据库(LINQ,FetchXml和QueryExpression),尽管有一些限制(例如,参见LINQ limitations),你只能通过使用on来解决-premise安装和本机SQL调用。
但是,对于您提供的具有空电话号码的帐户示例,三种支持的查询方法中的任何一种都可以使用。