Порядок структуры сущностей по динамическому вводу c или по умолчанию по идентификатору - PullRequest
0 голосов
/ 08 февраля 2020

Кто-нибудь есть идеи, как я могу сделать следующее:

У меня есть этот код:

sortOrder является пользовательский ввод

db.Table.OrderBy(s => sortOrder == "name" ? s.Table.Name : s.Id).ToList();

И получить следующую ошибку:

Error   CS0173  Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'int'

И если я установлю s.Id.ToString (), то он больше не будет упорядочен по возрастанию, а будет строкой и не будет упорядочен должным образом, есть ли способ для меня преобразовать функция, так что принимает цифры? Это почти похоже на ошибку, потому что оператор switch по умолчанию принимает Id, даже если case является строкой

1 Ответ

0 голосов
/ 08 февраля 2020

Если вы хотите использовать LINQ Dynami c, вам нужно знать о 2 библиотеках.

System.Linq.Dynami c

Эта библиотека бесплатна и имеет открытый код.

NuGet: https://www.nuget.org/packages/System.Linq.Dynamic/

Библиотека имеет собственный синтаксис, но очень проста в использовании:

myDataSource.OrderBy("someColumnName descending")

C# Выражение Eval

Отказ от ответственности : я владелец проекта C# Eval Expression

Библиотека не бесплатна, но вы можете сделать довольно много любой динамик c LINQ, использующий тот же синтаксис, что и C#.

Таким образом, вы сможете создать строку для оценки, и библиотека сделает все остальное за вас.

Вот Пример: https://dotnetfiddle.net/oxSl3s

var customersList2 = context.Customers
    .Include(x => x.Invoices)
    .WhereDynamic(c => "c.Invoices.Count > 0")
    .OrderByDescendingDynamic(c => "c.Invoices.Count")
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...