2016-12-07 3 views
0

Я осмотрел этот ответ, и то, что я нашел, похоже на то, что я делаю, но не совсем правильно. Я могу присоединиться к двум объектам, когда они являются списками, но не когда они являются особыми объектами. Я не уверен, если это имеет смыслКак объединить два объекта объекта?

Здесь у меня есть два сущность объектов

Location location = VIPEF.Locations 
    .Where(w => w.LocationID == id).FirstOrDefault<Location>(); 
Contact contact = VIPEF.Contacts 
    .Where(w => w.ContactID == location.ContactID).FirstOrDefault<Contact>(); 

Но когда я иду, чтобы написать запрос:

var query = from a in location 
      join b in contact on a <-- Thats where I get a problem 

когда я иду, чтобы присоединиться к двум я могу Я не получаю идентификатор от местоположения, и единственный вариант, который я получаю, - a.equals, а не a.LocationID, как я думаю, мне нужно получить.

Что я здесь делаю неправильно?

+0

Почему вы хотите объединить 2 объекта сущности? Это не запрос, это просто проекция на другой класс, например, 'var x = new Thing {LocID = location.LocationID, LocName = location.Name, ContactName = contact.Name ....}' – DavidG

+0

@DavidG, Я соединяю два объекта вместе, поэтому я могу вернуть один объект с помощью joned-данных. Я не часто использую LINQ, я обычно использую хранимые процедуры. Но, глядя на ваш пример, я понимаю, что делать сейчас и что я делаю неправильно. Если вы хотите опубликовать это как ответ с более глубоким объяснением, я был бы более чем счастлив отметить это как ответ – Chris

ответ

1

Вам не нужно Linq для объединения двух объектов вместе, вам просто нужно создать новый объект. Это довольно просто, используя object initialiser syntax:

var thing = new Thing //<-- Your class that has the combined properties you need 
{ 
    LocationID = location.LocationID, 
    LocationName = location.Name, 
    ContactName = contact.Name, 
    ContactAddress = contact.Address, 
    //etc... 
}; 

В качестве альтернативы, вы можете сделать все это в один идти, а не 2 запросов, а затем состав:

var things = from l in VIPEF.Locations 
      join c in VIPEF.Contacts on l.ContactID equals c.ContactID 
      where l.LocationID == id 
      select new Thing 
      { 
       LocationID = location.LocationID, 
       LocationName = location.Name, 
       ContactName = contact.Name, 
       ContactAddress = contact.Address, 
       //etc... 
      }; 

Это даст вам IEnumerable<Thing> играть с хотя это может иметь только одну запись.

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