LINQ: выбор данных из одного столбца в IQueryable‹›

У меня есть таблица, из которой мне нужно извлечь данные, и я хочу удалить один из двух столбцов, из которых поступают данные. В моей БД у меня есть «ObjectID (PK)» и «ObjectName».

Я хочу использовать эти данные для заполнения SelectList в проекте ASP.NET MVC, поэтому в моем коде должен быть объект IQueryable, который выглядит следующим образом:

public IQueryable<objectRef> FindSomeObject()
{
    return from myObj in db.TableName
        orderby myObj.colName
        select myObj;
}

Если я попытаюсь изменить последнюю строку, чтобы получить данные только из одного столбца, например:

select new { myObject.colName };

Я получаю предупреждение о том, что пытаюсь неявно преобразовать анонимный тип в мой текущий тип.

Раздражение заключается в том, что этот запрос используется в ViewData[""] для установки SelectList, который отображает раскрывающийся список в порядке, но записывает значение PK в новую таблицу вместо текста.

Я предполагаю, что я так мало знаю об этом, что даже не могу задать Google правильный вопрос, поскольку часы RTFM не выявили ничего полезного. Любая помощь будет оценена по достоинству.


person Paul Stevens    schedule 30.03.2009    source источник


Ответы (3)


Вам нужно изменить тип возврата вашего метода - если вы хотите выбрать только один столбец, просто объявите, что вы собираетесь что-то вернуть из этого столбца. Например:

public IQueryable<string> FindSomeObject()
{
    return from myObj in db.TableName
        orderby myObj.colName
        select myObj.colName;
}

В основном это говорит о том, что это запрос, который возвращает последовательность строк - я полагаю, это то, что вы хотите.

person Jon Skeet    schedule 30.03.2009

Используйте тип colName, например:

public IQueryable<string> FindSomeObject()
{
    return from myObj in db.TableName
        orderby myObj.colName
        select myObj.colName;
}
person eglasius    schedule 30.03.2009

Ты пробовал:

public IQueryable<objectRef> FindSomeObject()  
{
    return from myObj in db.TableName
        orderby myObj.colName
        select myObj.colName;
}

Кстати, у вас есть класс с именем objectRef, начинающийся с нижнего регистра? В начале должна быть заглавная буква (и это должен быть тип colName).

person Daniel Earwicker    schedule 30.03.2009
comment
@Jon Skeet, Freddy Rios и Earwicker Спасибо за ответы и за то, что указали мне правильное направление. Все работает как положено. @Earwicker: мой реальный код лучше, чем мой приведенный пример. Я все еще ловлю себя на том, что часто использую синтаксис в стиле Perl;) - person Paul Stevens; 31.03.2009