IQueryable设置为null我是新的链接,这是我的第一个任务使用它,它不顺利。 我有一个页面,可以按点击的列进行排序。 其中一列是Date列,DateSubmitted。当尝试OrderBy日期属性从类
我越来越不设置为对象的实例对象的错误...
我通过代码加强,发现只有等到它通过代码排序依据行列表对象包含的值。我认为这是因为dateAccepted属性包含null值,恰好在assignemnt data = data.OrderBy ...之前,数据包含416条记录,在传递赋值之后,它具有null并抛出错误。
我还有一个类似于这个问题的问题,我为重复道歉,但我真的需要一些解释,如果可能的话,以及一些关于如何解决这个问题的帮助。
我试着在dateAccepted后添加HasValue,但这没有什么区别。
任何帮助都是有价值的。非常感谢你。
var data = (from c in starter
select new ACPListObject()
{
contact = c,
Year = Year,
LastSentDate = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s.sentDateTime).FirstOrDefault(),
LastSubmit = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s.ACPForm).FirstOrDefault(),
lastFormComplete = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s).FirstOrDefault(),
isMyContact = (from m in c.smsEmployeeContacts where m.empID == userID select m).Any()
});
if (isCurrentYear)
{
var custs = (from c in emptyCustomers.ToList()
where c.ISCTBillingActive || c.ISFFDMBillingActive || c.IsMRIBillingActive || (c.IsPETBillingActive && c.custType != 2)
select new ACPListObject()
{
contact = new smsCustomerContact() { cntID = -1, smsCustomer = c, cntActive = true },
Year = Year,
LastSentDate = new DateTime(),
LastSubmit = (ACPForm)null,
lastFormComplete = (smsContactFormSent)null,
isMyContact = false
});
var combined = data.ToList();
combined.AddRange(custs);
data = combined.AsQueryable();
}
else if (sortColumn == "DateSubmitted")
{
if (asc)
{
data = data.OrderBy(o => o.lastFormComplete.ACPForm.dateAccepted);
}
else
{
data = data.OrderByDescending(o => o.lastFormComplete.ACPForm.dateAccepted);
}
}
return data.ToList();
}
编辑 我想你提出的解决方案,我认为这是工作,但由于某种原因,又名不被填充“dateSubmitted”为dateAccepted值。
他们的方式,对象连接的代码来获取dateAccepted是这样的:
ACPListObject
public class ACPListObject
{
public smsCustomerContact contact { get; set; }
public int Year { get; set; }
public DateTime LastSentDate { get; set; }
public ACPForm LastSubmit { get; set; }
public DateTime? dateAccepted { get; set; }
public smsContactFormSent lastFormComplete { get; set; }
public bool isMyContact { get; set; }
}
smsContactFormSent
public partial class smsContactFormSent
{
public System.Guid ID { get; set; }
public int cntID { get; set; }
public int sentBy { get; set; }
public System.DateTime sentDateTime { get; set; }
public bool completed { get; set; }
public Nullable<int> acpID { get; set; }
public virtual ACPForm ACPForm { get; set; }
public virtual smsCustomerContact smsCustomerContact { get; set; }
public virtual smsEmployee smsEmployee { get; set; }
}
public partial class ACPForm
{
public ACPForm()
{
this.ACPFormContacts = new HashSet<ACPFormContact>();
this.smsContactFormSents = new HashSet<smsContactFormSent>();
}
public int acpID { get; set; }
public int romID { get; set; }
public int customerID { get; set; }
public Nullable<System.DateTime> dateSent { get; set; }
public Nullable<System.DateTime> dateAccepted { get; set; }
}
难道是我没有得到值,因为我没有正确访问smsContactFormSent?
这是我如何实现您的解决方案:
public class ACPListObject
{
public smsCustomerContact contact { get; set; }
public int Year { get; set; }
public DateTime LastSentDate { get; set; }
public ACPForm LastSubmit { get; set; }
public DateTime? dateAccepted { get; set; }
public smsContactFormSent lastFormComplete { get; set; }
public bool isMyContact { get; set; }
}
var data = (from c in starter
select new ACPListObject()
{
contact = c,
Year = Year,
LastSentDate = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s.sentDateTime).FirstOrDefault(),
LastSubmit = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s.ACPForm).FirstOrDefault(),
lastFormComplete = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s).FirstOrDefault(),
dateAccepted = (from s in c.smsContactFormSents orderby s.sentDateTime descending select s.ACPForm.dateAccepted).FirstOrDefault(), //note that I am selecting dateAccept here so, this will be a DateTime or null
isMyContact = (from m in c.smsEmployeeContacts where m.empID == userID select m).Any()
});
else if (sortColumn == "DateSubmitted")
{
if (asc)
{
//data = data.OrderBy(o => o.lastFormComplete.ACPForm.dateAccepted);
data = data.OrderBy(o => o.dateAccepted);//order by new variable
}
else
{
//data = data.OrderByDescending(o => o.lastFormComplete.ACPForm.dateAccepted);
data = data.OrderByDescending(o => o.dateAccepted); //order by new variable
}
}
当一个新的ContactForm被发送,将不填充dateSubmitted值。我保持挖掘并查看错误是否来自其他地方。非常感谢你的帮助Marcos。
可能o.lastFormComplete为null或o.lastFormComplete.ACPForm为null。如果dateAccepted为null,则不会抛出任何异常。 – 2014-11-22 01:01:48
谢谢你的评论马科斯。你有什么我可以尝试补救例外的建议吗?非常感谢。 – 2014-11-22 01:49:05
你可能只会得到o.lastFormComplete不为null并且o.lastFormComplete.ACPForm不为空的记录,但我不知道你是否想要这个:'data = data.Where(o => o.lastFormComplete!= null && o.lastFormComplete。ACPForm!= null).OrderBy(o => o.lastFormComplete.ACPForm.dateAccepted);' – 2014-11-22 01:53:03