Bagaimana cara menggabungkan dua tabel dan mendapatkan daftar untuk dilihat menggunakan model tampilan?

saya punya dua tabel bernama "Events" dan "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; }
}

Dan

 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; }
}

ketika parameter UserId diteruskan ke metode tindakan, saya berencana untuk menampilkan semua acara yang diundang ke UserId itu dan semua pengguna lain yang telah diundang ke setiap acara itu...

Misalnya jika parameter userId adalah 2; saya ingin menampilkan semua EventIds dari userId 2 & untuk setiap EventId semua UserIds dan detail lainnya..

Saya mencobanya & saya mendapatkan beberapa informasi tentang acara tersebut tetapi tidak mendapatkan daftar pengguna yang juga diundang untuk setiap acara..

inilah metode tindakan saya;

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);
    }

dan pandanganku adalah;

@{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="/id#" 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>


}

dan model tampilan saya adalah;

  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
}

bagaimana saya bisa mengatasi masalah ini??apakah ada pendekatan selain ini jika pendekatan saya salah??


person Thilina De Silva    schedule 08.04.2015    source sumber


Jawaban (1)


Jika Anda tidak menggunakan pemuatan lambat, Anda harus menentukan hubungan yang Anda inginkan secara manual menggunakan perintah Sertakan. Ini disebut "gabung" dalam sintaks kueri mirip sql yang Anda gunakan.

Anda telah menyertakan gabungan antara Event dan EventUser, namun gabungan lain diperlukan antara EventUser dan Pengguna, karena Pengguna adalah entitas yang berbeda.

Saya tidak dapat membantu Anda dengan kodenya, karena kami tidak dapat mengetahui apa kunci utama pada objek Pengguna Anda. Namun lihat sintaks gabungan yang sudah Anda miliki, dan tambahkan gabungan lain antara EventUser dan Pengguna, dengan mengikuti format yang sama.

person Bob Tway    schedule 08.04.2015
comment
Tabel EventUser memiliki userIds.. saya hanya ingin tahu cara mendapatkan userIds tersebut..lalu saya dapat memperluas pengetahuan itu untuk bergabung dengan tabel pengguna dan mendapatkan nama pengguna... contoh: Tabel EventUser dapat memiliki baris seperti; EventId 1,UserId 1.. dan EventId 1,UserId 2.. dan seterusnya - person Thilina De Silva; 08.04.2015