2011-07-26 11 views
0

私は以下の3つのクラス(SQLテーブルにマップされています)を持っています。 Events.Name = Orders.EventName:group byとlinqのテーブルをSQLに結合する

Places table: 
Name(key) 
Address 
Capacity 

Events table: 
Name(key) 
Date 
Place 

Orders table: 
Id(key) 
EventName 
Qty 

場所やイベント表はイベントとOrdersテーブルながら、Places.Name = Events.Placeを介して接続されています。 タスクは、イベントが与えられた場合、そのイベントのために残されたチケットを返します。キャパシティは、その場所が保持できる数であり、Qtyは、誰かが注文したチケットの数です。したがって、Ordersテーブルで何らかの並べ替えが必要な場合は、その合計を容量から差し引いてください。

答えて

1

このようなもの(C#のコードサンプルは下記)?

奇妙な変数名は申し訳ありませんが、イベントはキーワードです。
私はVisual Studioを使用していませんでしたので、構文が正しいことを願っています。

string eventName = "Event"; 

var theEvent = Events.FirstOrDefault(ev => ev.Name == eventName); 
int eventOrderNo = Orders.Count(or => or.EventName == eventName); 

var thePlace = Places.FirstOrDefault(pl => pl.Name == theEvent.Place); 
int ticketsLeft = thePlace.Capacity - eventOrderNo; 

イベントが複数の場所を持っている場合は、最後の2行は次のようになります。

int placesCapacity = Places.Where(pl => pl.Name == theEvent.Place) 
          .Sum(pl => pl.Capacity); 

int ticketsLeft = placesCapacity - eventOrderNo; 

追記で
LINQ 101は、LINQに慣れるための素晴らしい方法です:http://msdn.microsoft.com/en-us/vcsharp/aa336746

+0

ありがとうございました、あなたの答えは私に正しい方向を指摘しました。わずかな構文エラーがあります.Sum(pl.Capacity)の代わりに正しい構文は.Sum(pl => pl.Capacity)です。しかし全体的に素晴らしい答え、また、サンプルとのリンクに感謝します。 – rescueme

+0

構文エラーを修正しました。ありがとう! – Zyphrax