1.错误意思:
出现错误的原因是:你要从一个null中取的数据。
2.错误的处理
1,使用FirstOrDefault() 来代替 First()
2、使用SingleOrDefault 来代替 Single
3、使用 ElementAtOrDefault 来代替 .ElementAt
4、如果是在Average, Sum等中报错
var items = new int[] {1, 2, 3, 4, 5};
Double avg = items.Average();
//替换为:
Double avg = items.Where(x=>x > 10).Average();
Double avg = items.Where(x=>x > 10).DefaultIfEmpty().Average();
=======================
用DefaultIfEmpty代替FirstOrDefault,不然查询结果为空时会报Sequence contains no elements的inner exception
decimal dversion = ctx.Spcspechis.Where(a => a.Factory == sFactory && a.ChartId == sChartId && a.ReleaseFlag == "Y"
&& a.ApplyStartTime.CompareTo(sApplyStartTime) <= 0 && ((a.ApplyEndTime == " ") || (a.ApplyEndTime.CompareTo(sApplyEndTime) >= 0
&& a.ReleaseTime.CompareTo(sReleaseTime) <= 0))).Select(a => new { a.Version }).DefaultIfEmpty().Max(t=>t.Version);
查出子查询的结果,再代入总的
spcspechis = ctx.Spcspechis.Where(t => t.Factory == sFactory && t.ChartId == sChartId && t.Version .CompareTo(dversion).FirstOrDefault();