首页 > 解决方案 > 选择抛出值中的 C# linq Expression Func 不能为空参数名称:源错误

问题描述

我正在编写简单的 linq 查询,如下所示。第一个选择映射器工作正常。但是第二个映射器类不工作并抛出'Value cannot be null; Parameter name: source'这真的让我发疯。不知道如何调试,因为按“F11”不会进入该方法。在下面的“用户”类中是数据对象。

返回结果的main方法:

    return await query
        .Select(UserSearchMappingSelector.ToDto(hasSensitiveAccess))
        .Select(UserSearchMappingSelector.ToViewModelFromDto(hasSensitiveAccess))
        .OrderBy(user => user.Name)
        .ToListAsync();

public static Expression<Func<User, SearchPersonDto>> ToDto(bool hasSensitiveAccess)
        {
            return (User entity)
            => new SearchPersonDto
            {
                Id = entity.Id,
                UserGuid = entity.UserGuid,
                KnownAs = entity.KnownAs,
                Forename = entity.Forename,
                Surname = entity.Surname,
                Manager = GetManager(entity),
                Subordinates = GetSubordinates(entity, hasSensitiveAccess)
            };
        }

public static Expression<Func<SearchPersonDto, SearchPerson>> ToViewModelFromDto(bool hasSensitiveAccess)
        {
            return (SearchPersonDto entity)
            => new SearchPerson
            {
                Id = entity.Id,
                UserGuid = entity.UserGuid,
                Name = User.GetDisplayName(entity.KnownAs, entity.Forename, entity.Surname),
                Manager = new Manager() { Id = entity.Manager.Id },
                Subordinates = new List<Subordinate>()
            };
        }

public partial class User
{
    // Logic is in sync with [org].[Select_AuditUsers]
    // if KnownAs is empty string DisplayName should be " surname"
    [NotMapped]
    public string DisplayName => GetDisplayName(KnownAs, Forename, Surname);

    public static string GetDisplayName(string knownAs , string forename, string surname)
    {
        return $"{knownAs ?? forename} {surname}";
    }
}

不确定为什么第二个映射器无法从 SearchPersonDto 类中读取 manager 属性。

谁能帮我上面的查询有什么问题?

此外,如果我在第二个映射器中评论 Manager 和 Subordinates 属性,一切正常。

谢谢

标签: c#entity-frameworklinq

解决方案


推荐阅读