2015-11-25 4 views
0

У меня есть две таблицыLINQ объединить две таблицы и просматривать обе колонки

tblPhases

И

tblTruck

Я JOINED эти два, но я могу» t, похоже, используют оба столбца для обеих таблиц.

Phase.cs

public class Phases 
{ 
    public int Id { get; set; } 

    public int TruckId { get; set; } 
    public virtual RTrucks Truck { get; set; } 

    public string Checkin { get; set; } 

    public string ChassisPrep { get; set; } 

    public string Floor { get; set; } 

    public string Body { get; set; } 

    public string Paint { get; set; } 

    public string Finished { get; set; } 

} 

RTruck.cs

public class RTrucks 
{ 
    public int Id { get; set; } 

    public string ChassisManufacturer { get; set; } 

    public string ChassisModel { get; set; } 
} 

Service.cs

[OperationContract] 
    List<Phases> GetPhasesbyTruck(int TruckId); 

Service.svc.cs

public List<Phases> GetPhasesbyTruck(int TruckId) 
    { 
     TruckDb db = new TruckDb(); 

     List<Phases> r = new List<Phases>(); 

     var join = from p in db.RTrucks 
        join t in db.Phases 
        on p.Id 
        equals t.TruckId 
        where t.Id == TruckId 
        select p; 


     foreach (var item in join) 
     { 
      r.Add(new Phases() 
      { 
    //this is not the actual coding but just a demonstration of what is 
    //actually happening                       
    // Phases item like Id = tblTruck item like truckId   
      }); 
     } 
     return r; 

    } 

Я не могу назвать столбцы из таблицы tblPhases только из таблицы tbltrucks, а также, как я могу использовать Phases.cs и RTruck.cs вместе в моем Еогеасп, так что я могу доступ к элементам класса?

ответ

2

Прежде всего, следующий код

var join = from p in db.RTrucks 
      join t in db.Phases 
      on p.Id equals t.TruckId 
      select p; 

достаточно, чтобы сделать соединение между двумя таблицами. вам не нужно добавлять дополнительные предложения where. Во-вторых, вы можете либо выбрать свойства из обеих таблиц, упомянутых Arianit в своем ответе, или вы можете просто выбрать Phases, как в приведенном выше запросе, а затем вы можете получить доступ к Truck через навигационные свойства, как

foreach (var p in join){ 
    int truckId = p.Truck.Id; 
    string chesis = p.Truck.ChassisManufacturer; 
    string model = p.Truck.ChassisModel; 
} 

Преимущество второго подхода является что вам не нужен новый класс для заполнения свойств из обеих таблиц. вы можете получить доступ ко всей информации с помощью свойств навигации.

+0

Спасибо @MuhammedAdeelZahid, что вы сделали мое кодирование немного более простым и более эффективным. –

+0

добро пожаловать @RGdent –

1

попробовать это:

var join = from p in db.RTrucks 
      join t in db.Phases 
      on p.Id equals t.TruckId 
      select new {TruckName = p.TruckName, //depends from your table column name 
      PhasesName = t.PhaseName 
      }; 

foreach (var item in join) 
{ 
    Console.WriteLine(item.TruckName + "\t" + item.PhaseName); 
} 

Удалите where из вашей LINQ

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