查询未返回任何值的列表

时间:2014-09-16 15:26:47

标签: c# linq

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。

1 个答案:

答案 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();