查询不返回任何值的列表

本文关键字:列表 任何值 返回 查询 | 更新日期: 2023-09-27 18:22:14

IEnumerable<ATable> stuff = 
        _aTableRepository.Entity.ByTitle(TITLE).ByDocTypeCode(Id).ToList();

上面返回一个项目列表

decimal? xyz = stuff.Where(x => x.CLAUSE == "test").FirstOrDefault().Id ?? 0;

现在我想查询列表并获取 id,这是一个十进制类型。但是,没有等同于"测试"的条款,这条线炸了。似乎如果找不到任何内容,则可为空的小数点将设置为 0。

查询不返回任何值的列表

查询

的问题在于,如果没有匹配的实体,FirstOrDefault将返回默认实体值。我相信实体是应用程序中的引用类型,因此null作为默认值。试图获得nullId会给你带来NullReferenceException

将实体序列投影到 ID 序列并选择第一个或使用默认值:

decimal? xyz = stuff.Where(x => x.CLAUSE == "test")
                    .Select(x => x.Id).FirstOrDefault() ?? 0;

您还可以使用 DefaultIfEmpty 提供默认值:

decimal? xyz = stuff.Where(x => x.CLAUSE == "test")
                    .Select(x => x.Id)
                    .DefaultIfEmpty(0).First();

和老派的方法 - 只需获取第一个匹配的实体并检查它是否不为空:

var testEntity = stuff.FirstOrDefault(x => x.CLAUSE == "test");
decimal? xyz = testEntity == null ? 0 : testEntity.Id;