2012-03-02 4 views
1

У меня в моей таблице DB поля TBus, такие как s1, s2.s3.s4, ... sn Я получаю seatNumber в качестве параметра и хочу получить это поле так же, как у меня есть мой код. Любая идея, пожалуйста.Этот запрос в Linq to Sql

private string checkSeatValue(int busTripId, int seatNumber) 
{ 
    string sNumber = "s" + seatNumber.ToString(); 
    // Some code here 

    string sqlCommand = "SELECT " + sNumber + " FROM TBus WHERE Id=" + busTripId + ""; 
    // More code here 
} 

ответ

0

Если вы хотите чистый код Linq2SQL, вы должны получить объект TBUS:

var bus = yourDataContext.GetTable<TBus>().Where(bus => bus.BusTripId == busTripId).SingleOrDefault(); 

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

var seat; 

switch(seatNumber) 
{ 
    case "s1": 
     seat = bus.Seat1; 
     break; 
    case "s2": 
     seat = bus.Seat2; 
     break; 
    // And so it goes on... 
} 

Тем не менее, может делать чистый код SQL через Linq также или играть с отражением.

- EDIT

Как я уже сказал в комментарии, я считаю, ваша модель базы данных может быть улучшена. Мой совет будет наличие двух таблиц:

TBUS Таблица

TBusId - int [PK] 
... 

TBusSeat Таблица

TBusSeatId - int [PK] 
TBusIs - int [FK referencing TBus.TBusId] 
SeatNumber - int 
... 

Таким образом, у вас есть более естественную гибкость, чтобы иметь дело с теми, кто король ситуаций. Рассмотрим следующий набор данных:

TBUS Таблица

TBusId 
------ 
1 
2 

TBusSeat Таблица

TBusSeatId | TBusId | SeatNumber | PassengerName 
------------------------------------------------ 
1   1  1   Josh Doe 
2   1  2   John Doe 
3   1  3   Jane Doe 
4   2  1   Jack Doe 

Таким образом, чтобы иметь дело с нужным запросом с Linq2SQL, было бы просто, как это :

var seat = yourDataContext.GetTable<TBusSeat>().Where(seat => seat.TBusId == 1 && seat.SeatNumber == 2).SingleOrDefault(); 

И вызывать seat.PassengerName приведет к John Doe.

+0

И IMHO, ваша модель базы данных перепутана. Было бы более гибким, если бы у вас была таблица «TBusSeat». – everton

+0

привет EvertonAgner .. что вы подразумеваете под таблицей TBusSeat ..? в каждом автобусе есть 54 места, как вы можете это сделать ..? путем создания 54 таблиц.? который пропущен. – kamiran

+0

Нет, друг мой. Мой совет будет состоять из двух таблиц: «TBus» и «TBusSeat». См. Мое редактирование для более подробной информации. – everton

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