C# 当数据不为空时,Linq查询返回空值
我有一个Linq查询,我正在使用它处理一些奇怪的结果。查询返回时,其中一项为null,但数据库中的数据不是nullC# 当数据不为空时,Linq查询返回空值,c#,linq,dynamics-crm-2011,C#,Linq,Dynamics Crm 2011,我有一个Linq查询,我正在使用它处理一些奇怪的结果。查询返回时,其中一项为null,但数据库中的数据不是null public void LookUpSomeInfoFromContractDetail(WorkflowHelper workflowHelper, String contractDetailId) { try { Guid _contractDetailId = workflowHelper.GuidChange
public void LookUpSomeInfoFromContractDetail(WorkflowHelper workflowHelper, String contractDetailId)
{
try
{
Guid _contractDetailId = workflowHelper.GuidChanger(contractDetailId);
workflowHelper.serviceContext.ClearChanges();
var contactDetailQuery = from ctd in workflowHelper.serviceContext.ContractDetailSet
where ctd.ContractDetailId.Equals(_contractDetailId)
select new { ctd.Title, ctd.ContractId, ctd.ContactId};
foreach (var c in contactDetailQuery)
{
//logic here
}
}
catch (Exception ex)
{
//catch stuff here
}
}
问题是ctd.ContactId值返回为null。但是,如果我在SQL中查看同一条记录,则该值不为null
有什么想法吗
在Millie Smith的评论之后,我再次查看了SQL和Linq,发现了一些有趣的东西:
在SQL中,我发现有一个值等于我要查找的值:
select
ctd.ContactId
,ctd.CustomerId
from ContractDetail ctd
where ctd.CustomerId = ctd.ContactId
返回与以下相同数量的结果:
select
ctd.ContactId
,ctd.CustomerId
from ContractDetail ctd
仍然不明白为什么在Linq中没有显示ctd.ContactId,为什么不选择ctd并手动检查返回的对象中的值。看看你得到了什么。workflowHelper.serviceContext.ContractDetailSet可能没有正确返回对象。@MillieSmith我选择了所有ctd它仍然为空;由于某种原因,特定项在我的linq查询中显示为null;虽然SQL中的同一项ContactId显示了一个值。但您确定workflowHelper.serviceContext.ContractDetailSet在ContactId属性中返回了正确的值吗?我认为问题在于当您从数据库中提取数据时,而不是通过linq运行数据时。workflowHelper.serviceContext是我正在使用的上下文,我在另一个类中设置了它,并且我正在从ContractDetailSet提取数据。当我只查询CTD对象时,它显示ContactID的值为null。其他值在整个CTD对象中显示正确。如果我没有从数据库中获得正确的数据,而不是从linq中获得正确的数据,我该如何判断?在C中使用SQL连接设置同一查询的同事也返回了null,尽管她的检查表明该记录在实际数据库中也不是null。只有当我们通过C调用它时,它才显示为null;contractDetail{Console.writelineec.ContactID;}中的foreach var c我猜ContactID仍然是空的。我不知道ContractDetailSet正在访问什么,但这可能是问题所在,而不是Linq查询。