我正在为 CRM 2011 开发一个调查模块,CRM 用户可以使用 Azure 上的动态网页对多个不同类型的问题进行调查,并要求联系人回答这些问题。到目前为止,我已经完成了大约 90% 的工作,只需要添加一些涉及数据管理的小改动。
我目前正在优化的部分涉及对我的问题进行排序。我在 CRM 中有 2 个实体:surveyquest 和 question。question是指调查中的实际问题,而surveyquestion是一个NN关系实体,带有一些附加字段,因此我们可以在不同的调查中重复使用问题。我在“问题”中有一个“groep”字段,用于指示一个问题是否应该与表单上的另一个问题组合在一起。我还有一个字段,“surveyquestion”中的“volgorde”,用于表示问题的顺序。我希望将具有相同“组”的所有问题一起显示,然后按 sortorder 字段对组内的任何问题(以及未分组的问题作为单独的组)进行排序。所以我基本上需要对 2 个不同表中的 2 个字段进行排序,
这是我目前正在使用的代码。我在 vraaglist 的连接上得到一个 nullreferenceexception,这很奇怪,因为 vr.Id 和 ev.slfn_vraag.Id 在相关行中都有数据。我不认为这是由于 orderby,因为上面的注释代码有效(但我不能简单地将 ev.volgorde 添加到我的 orderby 中,因为他抱怨这一点。
public List<slfn_vraag> GetVragenforEnquete(Guid enGuid)
{
//List<slfn_vraag> vraaglist = (from vr in _oContext.slfn_vraagSet
// join ev in _oContext.slfn_enquetevraagSet on vr.Id equals ev.slfn_vraag.Id
// orderby vr.slfn_Groep
// where ev.slfn_enquete.Id == enGuid
// select vr).ToList();
IQueryable<slfn_enquetevraag> enquetevraaglist = (from ev in _oContext.slfn_enquetevraagSet
orderby ev.slfn_volgorde
where ev.slfn_enquete.Id == enGuid
select ev);
List<slfn_vraag> vraaglist = (from vr in _oContext.slfn_vraagSet
join ev in enquetevraaglist on vr.Id equals ev.slfn_vraag.Id
orderby vr.slfn_Groep
select vr).ToList();
return vraaglist;
}
代码编译没有错误,但是当我运行它时,我在问题查询中得到一个 NullReferenceException。有人对如何解决这个问题有任何想法吗?
编辑:来自 VS2012 的异常详细信息,如下所示。
System.NullReferenceException occurred
HResult=-2147467261
Message=De objectverwijzing is niet op een exemplaar van een object ingesteld.
Source=Microsoft.Xrm.Sdk
StackTrace:
bij Microsoft.Xrm.Sdk.Linq.QueryProvider.TranslateJoin(QueryExpression qe, IList`1 methods, Int32& i, Projection& projection, List`1& linkLookups)
bij Microsoft.Xrm.Sdk.Linq.QueryProvider.GetQueryExpression(Expression expression, Boolean& throwIfSequenceIsEmpty, Boolean& throwIfSequenceNotSingle, Projection& projection, NavigationSource& source, List`1& linkLookups)
bij Microsoft.Xrm.Sdk.Linq.QueryProvider.Execute[TElement](Expression expression)
bij Microsoft.Xrm.Sdk.Linq.QueryProvider.GetEnumerator[TElement](Expression expression)
bij Microsoft.Xrm.Sdk.Linq.Query`1.GetEnumerator()
bij System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
bij System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
bij Enquete_Webform.Data.EnqueteGenerator.GetVragenforEnquete(Guid enGuid) in e:\VS\tfs_products\MS CRM\2011\Enquete\Enquete_Webform\Enquete_Webform\Data\EnqueteGenerator.cs:regel 49
InnerException: