EF/ASP 核心句柄字符串 属性 为 NULL 而不是空

EF/ASP Core handle string property as NULL instead of empty

我注意到我的对象的所有属性在客户端留空,在绑定时在服务器端保持为空。

这最终会在稍后执行一些 LINQ Where 条件时引发 null 对象异常,因为字符串 属性 是 null 而不是空的。

我已经尝试添加 context.DisplayMetadata.ConvertEmptyStringToNull = false 的 CustomMetadataProvider;在这里讨论 但没有运气。

 providers = await dbData.Providers.AsNoTracking().
                OrderBy(order)
                .Where(q =>
            (query.search == null ||
            q.No.ToString().Contains(query.search) ||
            q.Name.Contains(query.search) ||
            q.Address.Contains(query.search) ||
            q.PhoneFax.Contains(phoneQuery) ||
            q.PhoneNumber.Contains(phoneQuery) ||
            q.PhoneTollFree.Contains(phoneQuery)) && (query.getDeleted || !q.Deleted))
            .Skip((query.limit * (query.page - 1))).Take(query.limit)
                .AsNoTracking().ToArrayAsync();

字符串应该是 non-nullable 或者您应该处理 null 的情况。在您的数据库中,支持列将设置为 NULL 或 NOT NULL,具体取决于您是否将 [Require] 属性添加到 属性 中。如果不需要,那么 NULL 是一个完全可以接受的值,甚至可以说是 最佳 值,因为它明确表示 "unset" 而不是 "set to an empty string".

总而言之,如果您有一个可以为空的 属性 要查询,请先检查空值 :

(q.Name != null && q.Name.Contains(query.Search)) ||