PDA

View Full Version : سوال: نمایش یک رکورد و لیستی از رکوردها هم زمان با هم



gama_slv
یک شنبه 29 تیر 1393, 13:25 عصر
یک جدول دارم به نام User و یک جدول دیگر به نام Account این دو جدول به هم متصلند
میخواستم در یک view اول مشخصات یک یوزر را نمایش بدم و در زیر مشخصات یوزر جدولی از حسابهای همان یوزر
برای اینکه بتونم این دو جدول رو باهم تو view نشون بدم از view model استفاده کردم ولی نمیشه هم در view از لیست استفاده کنی هم از یک مدل تکی حتی اگر از
partial view استفاده کنم هم نمیشه
در view model
public class MemberViewModels {


//user
public int UserID { get; set; }
public string Name { get; set; }
public string Family { get; set; }


//Account
public int AcnID { get; set; }
public Nullable<System.DateTime> MemberDate { get; set; }
public Nullable<int> Store { get; set; }
public int Stock { get; set; }



//public IEnumerable<Acn> Acn { get; set; }
//public IEnumerable<User> User { get; set; }


}
اگر در view model از فیلد IEnumerable استفاده کنم نمیدونم چطور تو کنترل در linq چطوری select رو تعریف کنم

public ActionResult Index(int id = 0) {
var ListMember = (from ac in db.Acn
join us in db.User on ac.UserID equals us.UserID
where us.UserID == id
select new MemberViewModels
{
UserID = us.UserID,
Name = us.Name

}).Take(3).ToList();



return View(ListMember);
}

کلا چه راه حلی برای نمایش یک رک.رد و لیستی از رکوردها همزمان باهم تو یک view وجو داره

لطفا راهمنایی کنید

hadi0x7c7
یک شنبه 29 تیر 1393, 14:44 عصر
شما اصلا نیازی به join کردن نداری، یه ویوو مدل میسازی که این وییو مدل یک User میگیره و یک UserAcn توی اکشن ایندکس شما ای دی رو که دریافتی میکنی اگر از روش CodeFirst استفاده کهرده باشی و رابطه بین کاربر و حساب 1 به n باشه کافیه یه فیلد از لیست اونم به صورت virtual توی کلاس کاربر تعریف کنی و این طوری خود EF میره حسابای مربوط به کاربر رو واسط لود میکنه و در متد index کاربر رو که شما پیدا کنی تمام حسابای اونم پیدا میشه و راحت میتونی وییو مدل رو بسازی و به ویوو پاس بدی(البته تست نکردم)

gama_slv
یک شنبه 29 تیر 1393, 17:12 عصر
درسته نیاز به join نیست
بله از
CodeFirst استفاده کردم

این دو تا جدول user , Account

public Acn()
{
this.Payment = new HashSet<Payment>();
this.Loan = new HashSet<Loan>();
}


[Key]
public int AcnID { get; set; }
public int UserID { get; set; }
public int PeykID { get; set; }
public Nullable<System.DateTime> MemberDate { get; set; }
public int RangeID { get; set; }
public Nullable<int> Store { get; set; }
public int Stock { get; set; }
public Nullable<bool> IsSaye { get; set; }



public virtual Peyk Peyk { get; set; }
public virtual Range Range { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Payment> Payment { get; set; }
public virtual ICollection<Loan> Loan { get; set; }
}

public User()
{
this.Acn = new HashSet<Acn>();
}


[Key]
public int UserID { get; set; }
public int RoleID { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public string Family { get; set; }
public Nullable<System.DateTime> BirthDate { get; set; }
public string Mobile { get; set; }
public string Phone { get; set; }
public string Emaile { get; set; }
public string Address { get; set; }
public string Education { get; set; }

public virtual ICollection<Acn> Acn { get; set; }
public virtual Role Role { get; set; }
}



نمیشه تو view

@model IEnumerable<Kandu.Models.MemberViewModels>


استفاده کرد و بخوام یک رکورد ازش بگیرم این فقط لیست ولی من رکورد تکی هم میخوام

@model Kandu.Models.MemberViewModels

hadi0x7c7
یک شنبه 29 تیر 1393, 22:26 عصر
من الان متوجه نمیشم، شما میخوای توی یک صفحه کاربر و حساب اون رو نشون بدی؟ خب برای این کار شما توی اکشنی که این ویوو رو بر میگردونه، به عنوان مدل اگه User رو بهش پاس بدی، کل حسابای اون رو مگه توی فیلد ویرچوال Acnنمیاره؟ پس نیازی به این ویوو مدلی که شما تعریف کردی نیست، تنها یک قسمتی از مدل User نیاز هست. البته اگر اشتباه نکنم.