检索“空值”;从OrganizationServiceContext
本文关键字:OrganizationServiceContext 空值 检索 | 更新日期: 2023-09-27 18:13:49
我在使用c#和OrganizationServiceContext.CreateQuery
方法检索CRM 2011中的空列"null值"时遇到问题。我的代码如下。问题在于SubType
。当它为空时,我得到一个错误:"对象未设置为对象的实例"。有人能帮忙吗?
public List<Opportunities> GetOpportunitiesList()
{
using (_orgService = new OrganizationService(connection))
{
OrganizationServiceContext context = new OrganizationServiceContext(_orgService);
// Create Linq Query.
DateTime getdate = DateTime.Now.AddDays(-3);
var query = (from r in context.CreateQuery<Opportunity>()
join c in context.CreateQuery<Contact>() on r.ContactId.Id equals c.ContactId
into rc
from z in rc.DefaultIfEmpty()
where r.CreatedOn > getdate && r.new_type.Value != null
orderby r.ContactId
select new Opportunities
{
opporunity = r.new_OpportunityNumber,
//region =GetAccountRegionsbyId(a.new_region.Value),
accountid = r.CustomerId.Id,
topic = r.Name,
status = r.StateCode.Value.ToString(),
pcustomer = r.CustomerId.Name,
estReve = (decimal)r.EstimatedValue.Value,
owner = r.OwnerId.Name,
salesstagecode = r.SalesStageCode.Value,
pipelinePhase = r.StepName,
opptype = getAllOptionSetValues(r.LogicalName, "new_sf_recordtype", r.new_sf_recordtype.Value),
subtype = getAllOptionSetValues(r.LogicalName, "new_type", r.new_type.Value == null ? default(int) : r.new_type.Value),
estclosedate = r.EstimatedCloseDate.Value,
actualRev = (Microsoft.Xrm.Sdk.Money)r.ActualValue,
probability = r.CloseProbability.Value,
weighedRev = (decimal)r.new_WeightedValue.Value,
Email = z.EMailAddress1,
CreatedOn = r.CreatedOn.Value,
modifiedBy = r.ModifiedBy.Name,
modifiedOn = r.ModifiedOn.Value
}).ToList();
foreach (Opportunities o in query)
{
o.region = (from d in context.CreateQuery<Account>() where d.AccountId == o.accountid select getAllOptionSetValues(d.LogicalName, "new_region", d.new_region.Value)).FirstOrDefault();
}
return query;
}
}
我猜r.new_type是一个OptionSetValue。你需要检查它是否为空,而不是值是否为空。试试这个:
public List<Opportunities> GetOpportunitiesList()
{
using (_orgService = new OrganizationService(connection))
{
OrganizationServiceContext context = new OrganizationServiceContext(_orgService);
// Create Linq Query.
DateTime getdate = DateTime.Now.AddDays(-3);
var query = (from r in context.CreateQuery<Opportunity>()
join c in context.CreateQuery<Contact>() on r.ContactId.Id equals c.ContactId
into rc
from z in rc.DefaultIfEmpty()
where r.CreatedOn > getdate && r.new_type != null
orderby r.ContactId
select new Opportunities
{
opporunity = r.new_OpportunityNumber,
//region =GetAccountRegionsbyId(a.new_region.Value),
accountid = r.CustomerId.Id,
topic = r.Name,
status = r.StateCode.Value.ToString(),
pcustomer = r.CustomerId.Name,
estReve = (decimal)r.EstimatedValue.Value,
owner = r.OwnerId.Name,
salesstagecode = r.SalesStageCode.Value,
pipelinePhase = r.StepName,
opptype = getAllOptionSetValues(r.LogicalName, "new_sf_recordtype", r.new_sf_recordtype.Value),
subtype = getAllOptionSetValues(r.LogicalName, "new_type", r.new_type == null ? default(int) : r.new_type.Value),
estclosedate = r.EstimatedCloseDate.Value,
actualRev = (Microsoft.Xrm.Sdk.Money)r.ActualValue,
probability = r.CloseProbability.Value,
weighedRev = (decimal)r.new_WeightedValue.Value,
Email = z.EMailAddress1,
CreatedOn = r.CreatedOn.Value,
modifiedBy = r.ModifiedBy.Name,
modifiedOn = r.ModifiedOn.Value
}).ToList();
foreach (Opportunities o in query)
{
o.region = (from d in context.CreateQuery<Account>() where d.AccountId == o.accountid select getAllOptionSetValues(d.LogicalName, "new_region", d.new_region.Value)).FirstOrDefault();
}
return query;
}
}