我正在开发我的第一个MVC应用程序,其中我使用Linq查询我的数据库。
我在查询下面遇到问题。
indexModel.MostValuablePurchased = (from purch in db.Purchases
where purch.UserId == WebSecurity.CurrentUserId
&& purch.DateBought.Value.Year == DateTime.Now.Year
orderby purch.Price descending
select purch.TagNo).FirstOrDefault();
对于拥有数据的用户,它会按预期执行。但是当查询返回null时,当它到达带有错误的剃刀视图时会崩溃,并且#34;值不能为空或空。"
处理这种情况的最佳方法是什么。 谢谢
答案 0 :(得分:1)
它完全取决于您的应用程序和数据的业务规则,您可以在代码或视图中处理它。记住MVC设计模式的好处很重要,考虑到这一点,您可能不希望在视图中处理它,以便业务逻辑与数据表示分离。
例如,一种方法是创建一个变量来保存查询的值:
var mostValuablePurchased = (from purch in db.Purchases
where purch.UserId == WebSecurity.CurrentUserId && purch.DateBought.Value.Year == DateTime.Now.Year
orderby purch.Price descending
select purch.TagNo).FirstOrDefault();
然后适当地设置您的模型值
indexModel.MostValuablePurchased = mostValuablePurchased ?? 0;
显然,如果查询为null,您将需要将0替换为所需的任何默认值。此示例假设您要显示默认值,并且MostValuablePurchased是一个整数。
答案 1 :(得分:0)
请试试这个
if (WebSecurity.CurrentUserId!=null){
indexModel.MostValuablePurchased = db.Purchases.Where(o => o.UserId == WebSecurity.CurrentUserId && o.DateBought!=null && o.DateBought.Value.Year == DateTime.Now.Year && o.TagNo!=null).Max(o=>o.Price).TagNo;}