2

次のような 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();

2 つの質問があります。

  1. select new {} ブロックで割り当て中に値を変換できませんか? プロジェクトでエラーが発生しています。

  2. ExPAXRateたとえば、以前書いていたSQLでデータベースから選択するときに「ケース」を使用したい:

    CASE ap.SType WHEN 'オフシーズン' THEN at.PerPaxRateOS ELSE at.PerPaxRate END AS ExPAXRate

linq query でこのようなものを使用できますか?

4

1 に答える 1

2

select new {} ブロックで割り当て中に値を変換できませんか

いいえ、できません(残念ながら)。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();
于 2013-04-24T12:11:55.127 に答える