IQueryable не содержит определения для Count или OrderBy .. Не могу понять, почему - PullRequest
0 голосов
/ 01 мая 2020

Совершенно новый для C#, ASP. NET Ядро и веб-разработки в целом. Я пытаюсь реализовать обобщенный c метод, который я могу использовать с JQuery DataGrid. Метод выглядит следующим образом:

protected String ItemsToJson(IQueryable items, List<String> columnNames, String sort, String order, Int32 limit, Int32 offset)
        {
            try
            {
                Int32 count = items.Count();
                String sortExpression = "";

                if (sort != null && sort.Length > 0)
                    sortExpression += String.Format("{0} {1}", sort, order);

                if (limit == 0)
                    limit = count;

                var result = new
                {
                    total = count,
                    rows = items.OrderBy(sortExpression).Skip(offset).Take(limit).Select("new (" + String.Join(",", columnNames) + ")")
                };

                return JsonConvert.SerializeObject(result, Formatting.None, new JsonSerializerSettings() { MetadataPropertyHandling = MetadataPropertyHandling.Ignore });
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }

Строка, читающая Int32 count = items.Count (); возвращает следующую ошибку:

«IQueryable» не содержит определения для «Count», и доступный метод расширения «Count», принимающий первый аргумент типа «IQueryable», не найден (вы пропустили директиву using или ссылка на сборку?)

Строка чтения строк = Items.OrderBy (sortExpression) ..... возвращает следующую ошибку:

IQueryable не содержит определения для OrderBy 'и не удалось найти доступный метод расширения' Count ', принимающий первый аргумент типа' IQueryable '(вы пропустили директиву using или ссылку на сборку?)

У меня есть использование для System.Linq. Какие-нибудь мысли? Это сводит меня с ума!

Спасибо большое.

--- Val

1 Ответ

1 голос
/ 01 мая 2020

Какой тип предмета предоставляется IQueryable items?

Метод Count доступен для IQueryable<T>, то есть, если вы измените входящий параметр на IQueryable<SomeType> items, вы сможете получить к нему доступ.

https://docs.microsoft.com/en-us/dotnet/api/system.linq.iqueryable-1

Интерфейс IQueryable предназначен для реализации поставщиками запросов. Предполагается, что он будет реализован только теми поставщиками, которые также реализуют IQueryable<T>. Если поставщик также не реализует IQueryable<T>, стандартные операторы запросов не могут использоваться в источнике данных поставщика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...