EF Core, выполнить на сервере SQL в порядке приведения int из строки - PullRequest
1 голос
/ 25 октября 2019

Мне нужно найти последний сгенерированный элемент в таблице SQL.
К сожалению, по старым причинам я не могу отсортировать по любому другому столбцу, кроме строкового столбца (RawValue).
Кроме того, я не могу отсортироватьв этом столбце как строка , но мне нужно проанализировать его как Integer .

MyEntity myEntity = await _dbContext.MyEntity
  .AsNoTracking()
  .Where(...) // irrelevant
  .OrderByDescending(n => int.Parse(n.RawValue)).FirstOrDefaultAsync();

. Entity Framework сгенерировал эти предупреждения, которые развиваются вокруг приведенного выше оператора.

Microsoft.EntityFrameworkCore.Query.QueryClientEvaluationWarning ":: Выражение LINQ 'orderby Parse ([sn] .RawValue) desc' не может быть переведено и будет оцениваться локально.

Microsoft. EntityFrameworkCore.Query.QueryClientEvaluationWarning ":: Не удалось перевести выражение LINQ 'FirstOrDefault ()', и оно будет оценено локально.

Как выполнить это на стороне сервера с помощью каркаса сущностей?

Модель

public class MyEntity
{
    // ctors..

    public int Id { get; private set; }

    [MaxLength(32)]
    public string RawValue { get; private set; }

     // more irrelevant properties..
}

Информация о версии
dotnetcoreapp2.2 EF Core не имеет прямой ссылки, но включаетдобавлено в <PackageReference Include="Microsoft.AspNetCore.App" />

Решение Я только что подтвердил, что Convert.ToInt32(string) делает то, что int.Parse(string) не делает. Он генерирует ORDER BY CONVERT(int, column) .. оператор SQL.

1 Ответ

0 голосов
/ 25 октября 2019

Уверен, что решение заключается в использовании

Convert.ToInt32

Поскольку Int.parse не имеет реализации в используемой вами версии.

...