LINQ Регистрация только для Orderby - PullRequest
1 голос
/ 08 апреля 2010

Я пытаюсь запустить этот код:

ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
                         where itemTaxonomy.Item.ID == itemView.ID
                         orderby itemTaxonomy.Taxonomy.Name
                         select itemTaxonomy;

Когда я скомпилировал его, я получаю ошибку:

Невозможно неявно преобразовать тип 'System.Linq.IOrderedQueryable<Website.Models.ItemTaxonomy>' в 'Website.Models.ItemTaxonomy'.Существует явное преобразование (вам не хватает приведения?)

Я считаю, что проблема связана с orderby itemTaxonomy.Taxonomy.Name, но я просто пытаюсь упорядочить по названию элементов таксономии вместо их идентификаторов.Есть ли способ сделать это?

Ответы [ 3 ]

5 голосов
/ 08 апреля 2010

Нет, проблема в том, что результатом является последовательность , тогда как ваша переменная является отдельным элементом .

Учитывая, что вы выражаете порядок, вы должны ожидать нескольких значений - так что вы хотите с ними делать? Опции:

  • Использование First():

    ItemTaxonomy iTaxonomy = (from itemTaxonomy in connection.ItemTaxonomy
                              where itemTaxonomy.Item.ID == itemView.ID
                              orderby itemTaxonomy.Taxonomy.Name
                              select itemTaxonomy).First();
    

    Это вернет ItemTaxonomy с самым ранним именем из всех с соответствующим идентификатором предмета.

  • Измените тип переменной:

    IEnumerable<ItemTaxonomy> taxonomies = 
        from itemTaxonomy in connection.ItemTaxonomy
        where itemTaxonomy.Item.ID == itemView.ID
        orderby itemTaxonomy.Taxonomy.Name
        select itemTaxonomy;
    

    Теперь у вас есть последовательность таксономий вместо одного элемента.

2 голосов
/ 08 апреля 2010

Вы, похоже, получаете значение single из запроса .Попробуйте:

var iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
                where itemTaxonomy.Item.ID == itemView.ID
                orderby itemTaxonomy.Taxonomy.Name
                select itemTaxonomy;

или, если быть более точным:

IQueryable<ItemTaxonomy> iTaxonomy = ...

Если вы хотите хотите один элемент, используйте ,First() или .Single().

0 голосов
/ 08 апреля 2010

Запрос LINQ возвращает набор (IEnumerable<T>) ItemTaxonomy объектов, которые вы пытаетесь присвоить переменной типа ItemTaxonomy.

Вам необходимо изменить тип переменной на IEnumerable<ItemTaxonomy>. (Или звоните First())

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