2016-09-01 3 views
0

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

У меня есть две модели - BuyerProfile и Producerprofile

BuyerProfile

public class BuyerProfile : IAuditTrack 
{ 
    [KeyProperty(Identity = true)] 
    public int Id { get; set; } 
    [Required] 
    public string UserId { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public int BuyerTypeId { get; set; } 
    [Required] 
    public string Address { get; set; } 
    [Required] 
    public string City { get; set; } 
    [Required] 
    public string State { get; set; } 
    public string Zipcode { get; set; } 
    public string Description { get; set; } 

    [NonStored] 
    public string BuyerTypeDisplay { get; set; } 
} 

ProducerProfile

public class ProducerProfile : IAuditTrack 
{ 
    [KeyProperty(Identity = true)] 
    public int Id { get; set; } 
    [Required] 
    public string UserId { get; set; } 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Address { get; set; } 
    [Required] 
    public string City { get; set; } 
    [Required] 
    public string State { get; set; } 
    public string Zipcode { get; set; } 
    public string Description { get; set; } 
} 

У меня есть простой метод на мой контроллер, который извлекает все профили в базе данных и concatenates их вместе.

[HttpGet] 
public JsonResult GetAllProfiles() 
{ 
    var buyerProfiles = _profileService.GetAllBuyerProfiles(); 
    var producerProfiles = _profileService.GetAllProducerProfiles(); 

    var profiles = buyerProfiles.Concat(producerProfiles); 

    return Json(profiles, JsonRequestBehavior.AllowGet); 
} 

Теперь то, что я хотел бы сделать, это быть в состоянии найти каждый BuyerProfile и ProducerProfile что одни и те же UserId и объединить их вместе в новую модель, которая будет выглядеть следующим образом:

public class BuyerProducerprofile 
{ 
    public string UserId { get; set; } 
    public string BuyerName { get; set; } 
    public string ProducerName { get; set; } 
} 

существующая система, которую я создаю, позволяет пользователям только заполнить 1 BuyerProfile и 1 ProducerProfile.

Так, например, в наборе результатов я мог бы BuyerProfile, который содержит следующую информацию:

  • Id -> 1543
  • UserId -> абв123
  • Имя -> Боба Покупка компании

и ProducerProfile, который содержит следующую информацию:

  • Id -> 1678
  • UserId -> абв123
  • Имя -> Боба Продукция компании

Я хотел бы, чтобы иметь возможность объединить два в моей новой модели, так что это выглядит примерно так :

  • UserId -> абв123
  • BuyerName -> Боба о покупке компании
  • ProducerNam е -> Продукция компания Боб

Я не уверен, если это вообще возможно без использования какого-то Nuget пакета, но это было бы удивительным, если бы я не должен использовать тот, который я еще не иметь.

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

+0

Вы используете какие-либо структуры для доступа к своей базе данных? таких как Entity Framework? –

ответ

1

то, что вы хотите сделать, называется соединением.Вы можете сделать это, как этот

var buyerProfiles = _profileService.GetAllBuyerProfiles(); 
var producerProfiles = _profileService.GetAllProducerProfiles(); 

var combinedProfiles = 
    from bp in buyerProfiles 
    join pp in producerProfiles on bp.UserId equals pp.UserId 
    select new BuyerProducerprofile() 
    { 
     UserId = pp.UserId, 
     BuyerName = bp.Name, 
     ProducerName = pp.Name 
    } 

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

Другое примечание: это то, что называется «внутренним соединением», и оно даст вам результаты только для пользователей, имеющих оба профиля. Вы можете делать и другие виды объединений, но синтаксис для этих объединений не очень естественен, и я не имею их в памяти. Я уверен, что поиск в Google может найти синтаксис для вас.

+0

Большое спасибо за это! Да, я действительно хочу присоединиться, которое все равно даст мне все профили, но просто «null» значения, которые не совпадают. Я не понимал, что ты мог бы присоединиться к подобным объединениям, хотя так спасибо, что собрал меня там! – Quiver

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