Эта перегрузка метода System.String.Split в настоящее время не поддерживается - PullRequest
0 голосов
/ 17 апреля 2019

Я использую Split в выражении в .NET. Я получаю следующую ошибку:

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.

Разве нельзя использовать разбиение в выражении?

Код:

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 Ответ

1 голос
/ 17 апреля 2019

База данных не может сделать Split.Вместо этого сделайте это после извлечения:

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

И измените DbMapping, чтобы отбросить вещи Expression и Func, просто принимая сущность и возвращая 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;Я бы предпочел, чтобы вы использовали один из них и вообще не обрабатывали эту строку .

...