【发布时间】:2011-07-31 04:16:25
【问题描述】:
作为访问 Dynamics CRM 2011 数据和自定义搜索条件的最佳方式,我不知所措。我正在移植一个使用联系人数据库和表单安全性的网站。联系人已移至 Dynamics CRM 2011,因此我使用 CRM 2011 SDK 和早期绑定连接到 CRM 以检索数据。我使用了代码生成工具 CrmSvcUtil.exe。 我正在使用 LINQ 构建一个从联系人集中选择到 ContactViewDefault 类的查询:
IQueryable<ContactViewDefault> query = from c in orgContext.ContactSet
select new ContactViewDefault
{
Username = c.EMailAddress1 ?? "",
Title = c.Salutation ?? "",
Firstname = c.FirstName ?? "",
Lastname = c.LastName ?? "",
Organisation = "",
Position = c.JobTitle ?? "",
Phone = c.Telephone1 ?? "",
Mobile = c.MobilePhone ?? "",
};
PagedDataSource pagedData = new PagedDataSource();
pagedData.AllowCustomPaging = true;
pagedData.AllowPaging = true;
pagedData.PageSize = 10;
pagedData.CurrentPageIndex = 1;
pagedData.DataSource = query;
如果我然后数据绑定到“用户名”
<%# DataBinder.Eval(Container.DataItem, "Username")%>
我收到错误消息:“ContactViewDefault”不包含名为“用户名”的属性。 另外,不支持调用 query.Count()。
然后我尝试使用 CopyToDataTable 代码(请参阅:http://msdn.microsoft.com/en-us/library/bb669096.aspx)复制到数据表,然后使用我现有的中继器和分页。 问题是代码非常慢。填充数据表可能需要大约 3 分钟。表中有 7000 条记录。
我已经尝试过http://www.dotnetcurry.com/ShowArticle.aspx?ID=345 中描述的自定义分页,
query.OrderBy(c => c.Username);
query.Take(10);
query.Skip(0);
选择前 10 条记录,但仍然需要 20 多秒才能填充一个基本中继器。 相比之下,原始代码可以将所有数据选择到分页数据源中,并在不到一秒的时间内显示第一页。
所以我遇到了几个问题,我问我是否正确地处理了这个问题。 我有更多的页面要转换,包含更复杂的查询和连接,所以我想走上正确的道路。
【问题讨论】:
标签: performance linq-to-sql pagination dynamics-crm