2009-03-30 4 views
1

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

Я хотел бы использовать эти данные для заполнения 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 не показали ничего полезного. Любая помощь будет оценена по достоинству.

ответ

8

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

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

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

3

Используйте тип ColName, как:

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

Пробовали ли вы:

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

И, кстати, у вас есть класс с именем ObjectRef, начиная с нижнего регистра? Это должно иметь заглавное письмо в начале (и оно должно быть любым типом colName).

+0

@Jon Skeet, Freddy Rios and Earwicker Спасибо за ответы и за то, что указали мне в правильном направлении. Все работает так, как ожидалось. @Earwicker: мой фактический код лучше моего приведенного примера. Я все еще нахожу, что сильно удаляю синтаксис в стиле Perl;) –

Смежные вопросы