2013-04-24 2 views
2

У меня есть Linq запрос следующим образом:Использование сазе в Linq запрос

var trfplanList = (from at in entities.tdp_ProviderAccomodationType 
         join ap in entities.tdp_ProviderAccomodationTariffPlan on at.PATID equals ap.FK_PATID 
         join ac in entities.tdp_ProviderAccomodationCategory on ap.FK_PACID equals ac.PACID 
         where at.FK_ProviderID == CityID && at.IsApproved == 0 && ap.IsApproved == 0 && ac.AccomodationCategory == "Double Occupy" 
         orderby at.AccomodationType,ap.FromDate,ap.SType 
         select new AccomodationTariff 
         { 
          AccomodationType = at.AccomodationType, 
          SType = ap.SType, 
          FromDate = Convert.ToDateTime(ap.FromDate), 
          ToDate = Convert.ToDateTime(ap.ToDate), 
          RoomTariff = Convert.ToDecimal(ap.Rate), 
          ExPAXRate = Convert.ToDecimal(at.PerPaxRate) 
         }).ToList(); 

У меня есть два вопроса:

  1. Не удается преобразовать значение при назначении в выберите новый {} блок? это дает мне ошибку в проекте.

  2. Я хочу использовать «дело» при выборе ExPAXRate из базы данных, например, в SQL я писал:

    СЛУЧАЙ КОГДА ap.SType «межсезонья» THEN ELSE at.PerPaxRateOS at.PerPaxRate END AS ExPAXRate

Могу ли я использовать что-то подобное в запросе linq?

ответ

2

Не удается преобразовать значение при назначении в выберите новый {} блок

Нет, вы не можете (к сожалению). EF не знает, как перевести его в SQL.

Я хочу использовать 'дело'

Вы можете использовать тройной оператор (?):

ExPAXRate = at.OffSeason ? at.PerPaxRateOS : at.PerPaxRate 

(в предположении, что at.OffSeason существует).

Раствор для выдачи конверсии может быть проецировать в анонимный тип, а затем, в памяти, чтобы AccomodationTariff:

... 
select new 
{ 
    AccomodationType = at.AccomodationType, 
    SType = ap.SType, 
    FromDate = ap.FromDate, 
    ToDate = ap.ToDate, 
    RoomTariff = ap.Rate, 
    ExPAXRate = at.PerPaxRate 
}).AsEnumerable() 
.Select(x => new AccomodationTariff 
{ 
    AccomodationType = x.AccomodationType, 
    SType = x.SType, 
    FromDate = Convert.ToDateTime(x.FromDate), 
    ToDate = Convert.ToDateTime(x.ToDate), 
    RoomTariff = Convert.ToDecimal(x.Rate), 
    ExPAXRate = Convert.ToDecimal(x.PerPaxRate) 
}).ToList(); 
+0

ExPAXRate = at.OffSeason? at.PerPaxRateOS: at.PerPaxRate, здесь я хочу проверить что-то вроде этого ExPAXRate = ap.SType == «Off Season»? at.PerPaxRateOS: at.PerPaxRate, но он дает мне ошибку – DharaPPatel

+0

okey i получил решение, которое я должен написать: ExPAXRate = (ap.SType == "Off Season")? at.PerPaxRateOS: at.PerPaxRate – DharaPPatel

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