当前不支持方法'System.String.Split'的重载

时间:2019-04-17 08:47:30

标签: c# lambda split

我在.NET中的表达式中使用了Split。我收到下一个错误:

System.NotSupportedException: Could not parse expression 'e.Languages.Split(,, None)': This overload of the method 'System.String.Split' is currently not supported.

我不得不重载该方法,因为如果不这样做,我会得到下一个错误:

An expression tree may not contain a call or invocation that uses optional arguments.

在表达式中不能使用split吗?

代码:

public static Expression<Func<CompanyEntity, CompanyDto>> DbMapping()
{
    return comp => new CompanyDto
    {
        Id = comp.CompanyID,
        Languages = comp.Languages.Split(',',StringSplitOptions.None).Select(l => l.Trim()).ToList(),
    };
}

使用方式:

var company = await _dbContext.CompanyEntity
    .Where(comp => comp.CompanyID == companyId)
    .Select(Company.DbMapping())
    .FirstOrDefaultAsync();

1 个答案:

答案 0 :(得分:1)

数据库无法执行Split。取而代之的是:

var companyEntity = await _dbContext.CompanyEntity
    .Where(comp => comp.CompanyID == companyId)
    .FirstOrDefaultAsync();
if(companyEntity!=null){
    var company = Company.DbMapping(companyEntity);
    //etc
}

然后更改DbMapping来放置ExpressionFunc东西,只接受实体并返回DTO。

public static CompanyDto DbMapping(CompanyEntity comp)
{
    return new CompanyDto
    {
        Id = comp.CompanyID,
        Languages = comp.Languages.Split(',',StringSplitOptions.None).Select(l => l.Trim()).ToList(),
    };
}

插入有关用逗号分隔的字符串不是在数据库中存储多个值的明智方式的标准警告。 设计类型用于存储多个值-表,JSON和XML;我宁愿看到您使用一个,而不必完全执行

这样的字符串处理。