Как объединить две таблицы и получить список для просмотра с помощью модели представления?

у меня есть две таблицы под названием «События» и «EventUser»,

 public partial class Event
{
    public Event()
    {
        this.EventUsers = new HashSet<EventUser>();
        this.Objects = new HashSet<Object>();
    }

    public int Id { get; set; }
    public Nullable<int> CreatedBy { get; set; }
    public Nullable<System.DateTime> StartTime { get; set; }
    public Nullable<bool> IsShared { get; set; }
    public Nullable<double> Budget { get; set; }

    public virtual User User { get; set; }
    public virtual ICollection<EventUser> EventUsers { get; set; }
    public virtual ICollection<Object> Objects { get; set; }
}

и

 public partial class EventUser
{
    public Nullable<int> EventId { get; set; }
    public Nullable<int> UserId { get; set; }
    public bool IsAccepted { get; set; }
    public int EUPK { get; set; }

    public virtual Event Event { get; set; }
    public virtual User User { get; set; }
}

когда параметр UserId передается методу действия, я планирую отображать все события, которые были приглашены для этого UserId, и всех других пользователей, которые пригласили на каждое из этих событий...

Например, если параметр userId равен 2; я хочу отобразить все EventIds userId 2 и для каждого EventId все UserId и другие детали..

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

вот мой метод действий;

public ActionResult Index(int UId)

    {

        ViewBag.NotCount = 1;

        var result1 = from eu in db.EventUsers where eu.UserId == UId select eu;



        var result2 = from eu1 in result1
                      join e in db.Events on eu1.EventId equals e.Id
                      select new MessageViewModel {

                      EventID1 = e.Id,
                      IsAccepted= eu1.IsAccepted,
                      CreatedBy = e.CreatedBy,
                      Budget = e.Budget,


                      };




        return View(result2);
    }

и моя точка зрения такова;

@{var counter = 1;}

@if (!Model.Any())
{
    <div  style="margin-left:550px;margin-top:200px">
        <h2>"There are no notifications for you"</h2>

    </div>

}

else { 

foreach (var item in Model)
{


        <div class="panel panel-info" style="width:700px;margin-left:400px">
            <a href="#" class="close" data-dismiss="alert">&times;</a>
        <div class=" panel-heading">
            <h3 class="panel-title">Notification @counter</h3>
        </div>
        <div class="panel-body"><p>Event @item.EventID1 is created by @item.CreatedBy .Budget of the event is @item.Budget <p>

@if (item.IsAccepted)
{
<p>You have accept the invitation!!!</p>
}

@if (!item.IsAccepted)
{
    <p>You haven't accept the invitation yet!!!!</p>
}

            @{counter++;}

      </div>
    </div>


}

и моя модель просмотра;

  public class MessageViewModel
{
    public int EventID1 { get; set; }
    public bool IsAccepted { get; set; }
    public int? CreatedBy { get; set; }
    public DateTime StartTime { get; set; }

    public bool IsShared { get; set; }
    public int ObjectID { get; set; }
    public double? Budget { get; set; }

    public IEnumerable<EventUser> Euser { get; set; }
   // don't know if this is the
   // right way to get list of userids
}

как я могу преодолеть эту проблему? Есть ли какие-либо другие подходы, кроме этого, если мой подход неверен??


person Thilina De Silva    schedule 08.04.2015    source источник


Ответы (1)


Если вы не используете отложенную загрузку, вам нужно указать нужные отношения вручную с помощью команды «Включить». Это называется "присоединиться" в синтаксисе запроса, похожем на sql, который вы используете.

Вы включили соединение между EventUser и EventUser, но требуется другое соединение между EventUser и User, поскольку User — это другой объект.

Я не могу помочь вам с кодом, потому что мы не можем сказать, каков первичный ключ вашего объекта User. Но посмотрите на синтаксис соединения, который у вас уже есть, и добавьте еще одно соединение между EventUser и User, следуя тому же формату.

person Bob Tway    schedule 08.04.2015
comment
В таблице EventUser есть идентификаторы пользователей. Я просто хочу знать, как получить эти идентификаторы пользователей. Затем я могу расширить эти знания, чтобы присоединиться к пользовательской таблице и получить имена пользователей... например: таблица EventUser может иметь такие строки, как; EventId 1, UserId 1.. и EventId 1, UserId 2.. и т. д. - person Thilina De Silva; 08.04.2015