2012-04-02 5 views
-1

Я пытаюсь написать функцию, которая вернет все доступные автомобили в аренду из одной таблицы Cars. Cars имеет carId (int), carManufacturer (varchar), carModel (varchar) и carTaken (bool).Какой тип данных возвращает linq?

Но у меня возникла проблема с выяснением того, какой тип данных должен выполнять функция GetAvailableCars().

Я хочу разместить все автомобили, которые можно арендовать (carTaken == false), в текстовую ссылку на простой странице веб-клиента в отформатированном виде. Я, хотя string[], был бы хорошим выбором.

public string[] GetAllAvailableCars() 
    { 
     var result = 
      from car in carsDB.Cars 
      where (car.carTaken == false) 
      select car; 
     return result; 
    } 
+6

Вы можете узнать в IDE, перейдя через «var» - это скажет вам, что такое тип данных. – RQDQ

+0

Ох. Этого я не знал. – Bob

+0

Я хочу сфокусировать вопрос, поскольку он полностью ссылается на заголовок. – mrmillsy

ответ

5

Если вы хотите вернуть массив строк, что-то вроде:

(from car in carsDB.Cars 
where (car.carTaken == false) 
select car.carModel).ToArray(); 

Должно работать

EDIT: На просьбу автора, чтобы выбрать все столбцы:

(from car in carsDB.Cars 
where (car.carTaken == false) 
select String.Format(
    "ID: {0}; Manufacturer: {1}; Model: {2}", 
    car.carId, 
    car.carManufacturer, 
    car.carModel 
)).ToArray(); 

Я не могу скомпилировать ваш класс Cars, но я думаю, что это правильно. Дайте мне знать, если вы получите какие-либо ошибки.

+0

Будьте осторожны, чтобы скопировать-вставить, это дает только модель. –

+0

Хммм. Как вы можете выбрать весь столбец из таблицы? Я попробовал 'select car.CarModel, car.', но в этот момент он находит утверждение как ошибку. – Bob

+0

@Gabriel GM: Я знаю, что я не копировал и не вставлял. Если бы я выбрал машину, это не было бы String []. Это были бы Автомобили []. Я пытался продемонстрировать String []. –

1

Просто ударить по этому вопросу, но не хотите выбрать автомобиль.Модель, а не весь автомобиль?

+0

На самом деле я хочу выделить все столбцы. – Bob

6

Похоже, IQueryable<Car> для меня - по крайней мере, это переменная result будет.

+0

Это должен быть правильный ответ. – mrmillsy

2

Запрос возвращает объект данных Car. Используйте этот код, чтобы получить все названия:

public string[] GetAllAvailableCars() 
{ 
    return carsDB.Cars 
     .Where(x => x.carTaken == false) // filter cars 
     .Select(car => car.model) // select what we need 
     .ToArray(); // Execute query 
} 
1

LINQ работает на Deferred Execution.

from car in carsDB.Cars 
     where (car.carTaken == false) 
     select car; 

Он просто возвращает запрос. Но не фактические результаты запроса.

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

Good Starting point is here

1
var result = from car in carsDB.Cars 
         where car.carTaken == false 
         select car; 

результат является IEnumerable автомобиля

var result = (from car in carsDB.Cars 
          where car.carTaken == false 
          select car).ToArray(); 

результат автомобиль [ ]

для конкретного возврата, такого как:

var result = from car in carsDB.Cars 
          where car.carTaken == false 
          select new {car.a, car.b}; 

результат IEnumerable а, б

2

насчет:

public IQueryable<string> GetAllAvailableCars() 
{ 
    return carsDB.Cars.Where(c => c.carTaken == false).Select(c => c.model); 
} 
0

Там нет ни одного типа данных для запросов LINQ, поскольку это зависит от контекста.

В вашем случае вы выбираете «Автомобиль», поэтому тип данных будет IQueryable. Как указано в комментариях, вы можете навести указатель мыши на любой var (а не только на запросы LINQ), чтобы получить тип данных.

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