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