Asp.net mvc 无法捕获是否缺少列表项名称

Asp.net mvc 无法捕获是否缺少列表项名称,asp.net-mvc,linq,entity-framework-4,Asp.net Mvc,Linq,Entity Framework 4,我有以下代码,它按我的表分组,并根据模型名称选择计数:- var IT360Counts = entities.Resources.Where(a => String.IsNullOrEmpty(a.ASSETTAG) && (a.SystemInfo.ISSERVER == true)) .GroupBy(a => a.SystemInfo.MODEL.ToLower()) .Select(g => new { Action = g.K

我有以下代码,它按我的表分组,并根据模型名称选择计数:-

var IT360Counts = entities.Resources.Where(a => String.IsNullOrEmpty(a.ASSETTAG) && (a.SystemInfo.ISSERVER == true))
  .GroupBy(a => a.SystemInfo.MODEL.ToLower())
  .Select(g => new
  {
      Action = g.Key.ToLower(),
      ItemCount = g.Count()
  }).ToLookup(a => a.Action);
然后我将参考var内容,例如:-

 IT360RouterNo =  IT360Counts["router"] == null ? 0 : IT360Counts["router"].SingleOrDefault().ItemCount,
上述方法可以很好地工作,除非第一个查询没有任何路由器,否则第二个语句将始终返回null exception。所以我的问题是,如果IT360Counts[“路由器”]存在或不存在,是否有一种方法可以捕获


谢谢

IT360Counts[“router”]
不是空列表,而是空列表时,就会发生这种情况。在这种情况下,
IT360Counts[“router”].SingleOrDefault()
将返回null,因此当访问其
ItemCount
属性时,您将得到null异常

这是因为
查找
中的索引器在找不到键时返回空列表。看见尝试检查查找是否包含密钥,
IT360Counts.contains(“路由器”)
。通过这种方式,您可以:

IT360RouterNo =  IT360Counts.Contains("router") ? IT360Counts["router"].SingleOrDefault().ItemCount : 0,
作为旁注,您是否也考虑过使用
ToDictionary
而不是
ToLookup
?字典键将是您的操作和ItemCount的值,因此在检索值时,您只需在字典中获取键的值,如
“router”
。如果您总是执行
.SingleOrDefault().ItemCount
从不相同操作需要多个项目,那么最好使用字典

为了完成这项工作,这个想法是:

var IT360Counts = entities.Resources.Where(a => String.IsNullOrEmpty(a.ASSETTAG) &&(a.SystemInfo.ISSERVER == true))
                          .GroupBy(a => a.SystemInfo.MODEL.ToLower())
                          .Select(g => new
                          {
                              Action = g.Key.ToLower(),
                              ItemCount = g.Count()
                          }).ToDictionary(a => a.Action, a => a.ItemCount);

IT360RouterNo =  IT360Counts.ContainsKey("router") ? IT360Counts["router"] : 0,
希望有帮助