如果在 Linq 中不为空,则修剪字符串

本文关键字:修剪 字符串 Linq 如果 | 更新日期: 2023-09-27 18:37:14

我遇到了这个反复出现的问题,我正在使用使用固定长度的字符数据类型的遗留数据库和 linq to sql。

当我返回字符串时,它的末尾总是有填充,如果我想在 select 语句中连接两个字符串,我总是需要在这样做之前检查是否不为 null,例如:

 return (from person in personRepository.Get(p => p.FIRSTNAME.StartsWith(firstName)
         || p.SURNAME.StartsWith(surname) || p.DOB == dob)
                select new PersonSearchModel
                {
                    FullUserName = (person.SURNAME ?? "").Trim() + ", " 
                                 + (person.FIRSTNAME ?? "").Trim() + " " 
                                 + (person.MIDDLENAME ?? "").Trim()
                }).ToList();

有没有更好的方法?我可以在数据库上下文中有一些东西来自动修剪字符串吗?

如果在 Linq 中不为空,则修剪字符串

我最终更改了 t4 模板,以便类生成自动修剪的字符串,如果它们不为 null,否则它们返回 null。

 public string Property(EdmProperty edmProperty)
{
    string type = _typeMapper.GetTypeName(edmProperty.TypeUsage);
    string propertyName = _code.Escape(edmProperty);
    if(type == "string"){
    return string.Format(
        CultureInfo.InvariantCulture,
        "private {1} _{6}; {5} 't{0} {1} {2} {{ {5}'t't{3}get{{return _{6} == null ? null : _{6}.Trim();}} {5}'t't{4}set{{ _{6} = value;}} }}",
        Accessibility.ForProperty(edmProperty),
        type,
        propertyName,
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)),
        Environment.NewLine,
        propertyName.ToLower()
        );
    }else{
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1} {2} {{ {3}get; {4}set; }}",
        Accessibility.ForProperty(edmProperty),
        _typeMapper.GetTypeName(edmProperty.TypeUsage),
        _code.Escape(edmProperty),
        _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
        _code.SpaceAfter(Accessibility.ForSetter(edmProperty)));
        }
}