linq to sql跟linq to object还是有不同的…
linq to sql和linq to object还是有不同的……做的一个同步器,首先要拿最近一天的同步数据:var lstCptrSellS
linq to sql和linq to object还是有不同的…… 做的一个同步器,首先要拿最近一天的同步数据:
var lstCptrSellStatus = (from p in db.CptrSellingStatus where p.ItemId == CptrItemId select p).ToList(); var lastCptrSellStatus = lstCptrSellStatus.Where(p => p.SynDate == lstCptrSellStatus.Max(g => g.SynDate)).FirstOrDefault();其中lstCptrSellStatus可能没数据,但lstCptrSellStatus.Max这里可以正常运行。然后如果同步数据最近一天时间比现在超过1天的插入数据,否则更新,所以要重新拿另一条同步记录:
lastCptrSellStatus = lstCptrSellStatus.Where ( p => p.SynDate == lstCptrSellStatus.Where(g => g.SynDate < lastCptrSellStatus.SynDate).ToList().Max(g => g.SynDate) ).FirstOrDefault();到了这里
lstCptrSellStatus.Where(g => g.SynDate < lastCptrSellStatus.SynDate).ToList().Max(g => g.SynDate)就报错了,“序列不包含任何元素”……通常这种情况大家是怎么做的呢?
[解决办法] var testQuery=lstCptrSellStatus.Any()?lstCptrSellStatus.Max(g => g.SynDate):0; [解决办法] 如果一个序列没有元素,调用Max就出错了。
比如
int[] a = new int[] { };
int max = a.Max(); // 出错
[解决办法] 老曹已经跟你说了原因了啊,你的错误出现在子查询语句上
var lastCptrSellStatus = lstCptrSellStatus.Where(p => p.SynDate == lstCptrSellStatus.Max(g => g.SynDate)).FirstOrDefault();
换一下这样来实现:
var lastCptrSellStatus = lstCptrSellStatus.OrderByDescending(p => p.SynDate ).FirstOrDefault(); [解决办法] 引用: Quote: 引用: 老曹已经跟你说了原因了啊,你的错误出现在子查询语句上 var lastCptrSellStatus = lstCptrSellStatus.Where(p => p.SynDate == lstCptrSellStatus.Max(g => g.SynDate)).FirstOrDefault(); 换一下这样来实现:var lastCptrSellStatus = lstCptrSellStatus.OrderByDescending(p => p.SynDate ).FirstOrDefault(); 我知道原因啊……可是为何4楼那句不报错呢……4楼的lstCptrSellStatus也是空的猜测一下,可能是因为linq是延迟执行的,