私はLinq To SQLを使用するプロジェクトを開始したばかりです(この理由はさまざまですが、 EFまたは他のORMではない)。 私は以前の(そして私はここでVB6で話している)古いコードを移行することを任されています。 私は主にT-SQLのバックグラウンドから来たので、私が望むことをするクエリをノックしましたが、LINQ to SQL(C#3.5)を使用する必要があります。データベースがSQL Server 2008 R2および/またはSQL AzureのここLinq出力で複数のテーブル列を持つSQL同等のグループ
なること 注意がT-SQLである(簡体字)
SELECT TBS.ServiceAvailID, sum(Places) as TakenPlaces,MAX(SA.TakenPlaces)
FROM TourBookService TBS
JOIN TourBooking TB
ON TB.TourBookID=TBS.TourBookID
JOIN ServiceAvail SA
ON TBS.ServiceAvailID = SA.ServiceAvailID
WHERE TB.Status = 10
AND ServiceSvrCode='test'
GROUP BY TBS.ServiceAvailID
HAVING sum(Places) <> MAX(SA.TakenPlaces)
ので、顧客の予約の詳細がありTourBookingテーブルがあります。これは、予約したサービスの詳細を含むTourBookServiceテーブルをハングアップします。また、TourBookServiceテーブルにリンクするServiceAvailテーブルもあります。これで、Placesの合計は、Taken場所の金額とServiceAvailテーブルの金額が同じになるはずですが、時にはそうではありません。このクエリは、これが当てはまらない場合には何かを返します。私は合計(場所)の詳細を取得するためのLINQを作成することができますが、私はまたTakenPlacesが
var q = from tbs in TourBookServices
join tb in TourBookings on tbs.TourBookID equals tb.TourBookID
join sa in ServiceAvails on tbs.ServiceAvailID equals sa.ServiceAvailID
where (tb.Status == 10)
&& (tbs.ServiceSvrCode =="test")
group tbs by tbs.ServiceAvailID
into g
select new {g.Key, TotalPlaces = g.Sum(p => p.Places)};
私は必要があります(これはどちらかHAVING
句が含まれていないことに注意)を取得する構文を取得するために苦労しています何とかsaテーブルをグループに入れ、selectにを追加することができます。
T-SQLの考え方をLINQに強制しようとしていますか? 私はServiceAvailテーブルからすべての適切な詳細を取得した後、両方の結果セットをループし、簡単に実行できるキーに一致する別のクエリを作成できますが、間違っていると感じます(しかし、それは私だけかもしれません)。 どんなコメントも感謝します。
UPDATE:以下受け入れ答えを1として 、これはLinqerがくれたものです。私は演劇を持って、それが実際に作成するSQLを見ます。あなたのケースでは
from tbs in db.TourBookService
join sa in db.ServiceAvail on tbs.ServiceAvailID equals sa.ServiceAvailID
where
tbs.TourBooking.Status == 10
tbs.ServiceSvrCode == "test")
group new {tbs, sa} by new {
tbs.ServiceAvailID
} into g
where g.Sum(p => p.tbs.Places) != g.Max(p => p.sa.TakenPlaces)
select new {
ServiceAvailID = (System.Int32?)g.Key.ServiceAvailID,
TakenPlaces = (System.Int32?)g.Sum(p => p.tbs.Places),
Column1 = (System.Int32?)g.Max(p => p.sa.TakenPlaces)
}
あなたは大まかで大量のようなマイクロオーミックを使用できますか?それはあなたが変換するのはかなり簡単です。 –
残念なことに私の手はLinqとSQLのあいだで – PabloInNZ