IEnumerable<ATable> stuff =
_aTableRepository.Entity.ByTitle(TITLE).ByDocTypeCode(Id).ToList();
以上返回项目列表
decimal? xyz = stuff.Where(x => x.CLAUSE == "test").FirstOrDefault().Id ?? 0;
现在我想查询列表并获取id,这是一个十进制类型。但是,没有任何条款等于&#34; test&#34;这条线炸了出来。似乎没有找到任何内容,可以为空的十进制设置为0。
答案 0 :(得分:2)
您的查询存在的问题是,如果没有匹配的实体,FirstOrDefault
将返回默认实体值。我相信实体是您的应用程序中的引用类型,因此您将null
作为默认值。试图获得Id
的{{1}}会给您null
。
将实体序列投影到id序列并选择第一个或使用默认值:
NullReferenceException
您还可以使用DefaultIfEmpty
提供默认值:
decimal? xyz = stuff.Where(x => x.CLAUSE == "test")
.Select(x => x.Id).FirstOrDefault() ?? 0;
老派的方法 - 只需获得第一个匹配的实体并检查它是否为空:
decimal? xyz = stuff.Where(x => x.CLAUSE == "test")
.Select(x => x.Id)
.DefaultIfEmpty(0).First();