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,
希望有帮助