2016-10-23 7 views
1

することにより、グループの別のフィールドが含まれるので、すべきではこのは、どのように私は一人のユーザーが持っているすべての艦隊と各艦隊</p> <p>のすべての車でツリービューを表示するように設定データを作成したい

ように見える木
| 
| - fleetName -- fleet_id as node key 
| | 
| |--- plate_number -- gps_device_id as node key 
| - plate_number -- for cars wont belong to any fleet  

customer_cars

CREATE TABLE tracker.customer_cars 
(
    customer_car_id integer NOT NULL DEFAULT nextval('customer_cars_car_id_seq'::regclass), 
    gps_device_id integer, 
    plate_number string 
    user_id text NOT NULL, 
    fleet_id integer, 

    CONSTRAINT customer_cars_idx PRIMARY KEY (customer_car_id), 
    CONSTRAINT cars_gps_device_fk FOREIGN KEY (gps_device_id) 
     REFERENCES tracker.gps_devices (gps_device_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fleet_fk FOREIGN KEY (fleet_id) 
     REFERENCES tracker.fleet_cars (fleet_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

fleet_cars

0123私は

var customer_cars = db.customer_cars 
       .Include(c => c.gps_devices) 
       .Include(c => c.fleet_cars) 
       .Where(c => c.user_id.CompareTo(UserId) == 0) 
       .GroupBy(c => c.fleet_id, 
         c => c.fleet_cars, 
         (key, g) => new 
         { 
          FleetID = key,         
          Cars = g.ToList() 
         } 
      ); 

してみてくださいしかしfleet_nameを持っていけない何

CREATE TABLE tracker.fleet_cars 
(
    fleet_id serial NOT NULL, 
    fleet_name text, 
    user_id text NOT NULL, 
    CONSTRAINT fleet_idx PRIMARY KEY (fleet_id) 
) 

、唯一fleet_idと車はキーで少し自分のグループを変更するgps_device_id

foreach (var fleet in customer_cars) 
{ 
    -- have id but no name 
    string fleet_id = fleet.FleetID.HasValue ? fleet.FleetID.ToString() : "0"; 

    foreach (var car in fleet.Cars){ 
     string fleet_name = car.fleet_name; -- have fleet_name 
     string gps_id = car.gps_device_id ; -- dont have gps_device_id    
    } 
} 
+1

Try:.GroupBy(c => new {c.fleet_id、c.fleet_cars})。名前を取得するには、idで2つのテーブルを結合する必要があります。 – jdweng

+0

@jdwengその場合、 'fleet in customers_cars'は艦隊オブジェクトではないコレクションです。 'fleet = {fleet_id、fleet_name、list }' –

+0

私はあなたがJOINを使う必要があると言った。 msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

答えて

2

なしcustomer_cars行を持って、あなたが取得しますあなたが望むこと:

var customer_cars = db.customer_cars 
         .Include(c => c.gps_devices) 
         .Include(c => c.fleet_cars) 
         .Where(c => c.user_id.CompareTo(UserId) == 0) 
         .GroupBy(c => new { c.fleet_id, c.fleet_cars}) 
         .Select(gr => new 
         { 
          FleetID = gr.Key.fleet_id,  
          FleetName = gr.Key.fleet_cars.fleet_name,         
          Cars = gr.ToList() 
         }); 
+0

これははるかに良いです。今すぐFleetNameが必要です。 –

+0

@JuanCarlosOropezaこんにちは、あなたは私の答えを編集しました。あなたはそれがあなたが欲しいと思って働いているか、それともうまくいきませんでしたか? – Christos

+0

はい、私はそれをテストし、自分自身を見つけました。正しい結果が得られるかどうかを確認してください。 –

関連する問題