Я впервые переписываю оператор SQL для LINQ. Я не совсем уверен, как правильно написать заявление по моему делу. Среде выполнения не нравится, как я ее написал (я использовал эту ссылку в качестве примера)
Моя цель - организовать мои данные с помощью оператора case. Пожалуйста, дайте мне знать, что я могу изменить для достижения sh моей цели.
Моя ошибка говорит:
InvalidOperationException: The LINQ expression 'DbSet<Table>
.Where(c => c.ID ==(Nullable<int>)10)
.OrderBy(c => c.column1)
.ThenBy(c => _sortOrder_0.TryGetValue(
key: c.column3,
value:_order_1)?_order_1:_defaultOrder_2)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), ToList(), or ToListAsync()
Исходный SQL запрос:
SELECT column1, column2, column3 from table where ID = # order by column1,
Case column3 When 'X' Then 1 When 'Y' Then 2 When 'Z' Then 3 End
LINQ:
public async Task<IActionResult> Index()
{
var sortOrder = new Dictionary<string, int>
{
{"X", 1 },
{"Y", 2 },
{"Z", 3 },
};
var defaultOrder = sortOrder.Max(x => x.Value) + 1;
int order;
var dataTest = _context.TableModel
.Where(x =>
(x.ID == 10)
)
.Select(x => new TableModel
{
column1 = x.column1,
column2 = x.column2,
column3 = x.column3,
})
.OrderBy(x => x.column1)
.ThenBy(x => sortOrder.TryGetValue(x.column3, out order) ? order : defaultOrder)
.AsNoTracking()
.ToListAsync();
}
Боковое примечание: я использую ID = 10 для целей тестирования. Спасибо за уделенное время!