PDA

View Full Version : join دو جدول با استفاده از viewmodel و نمایش داخل یک لیست



leilast
دوشنبه 27 شهریور 1396, 13:53 عصر
سلام
من برای join دو جدول به این ترتیب عمل کردم.

ViewModel

public class AddProfileViewModel
{
public IEnumerable<MyTest.Models.DomainModels.User> Users { get; set; }
public IEnumerable<MyTest.Models.DomainModels.File> Files { get; set; }
}



Controller

public ActionResult ShowProp()
{
var db = new TestDBEntities2();
var model = from p in db.Users
join pi in db.Files on p.Username equals pi.Username

select new
{
p.Name,
p.Mobile,
pi.Images
};
return View(model);
}



حالا برای ویو وقتی میحوام جدولی حاصل از join هر دو تشکیل بدم باید دچار مشکل شدم. چون در model باید حتما مشخص کنم که دقیقا قبلدهای کدوم جدول رو نشون اما من میخوام یک جدول جدید حاصل از کوئری join بسازم.

@model MyTest.ViewModels.Admin.AddProfileViewModel

@foreach (var item in Model.Users)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>

<td>
@Html.DisplayFor(modelItem => item.Mobile)
</td>

</tr>
}

همونطور که در قسمت foreach میبینید نوشتمModel.Users اما باید یه جوری Model خالی بنویسم تا هر کدوم از فیلدها و جداولش رو در داخل foreach بهش بدم.
یعنی داخل foreach بتونم بگم:

@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.User.Name)
</td>


<td>
@Html.DisplayFor(modelItem => item.User.Mobile)
</td>


<td>
@Html.DisplayFor(modelItem => item.File.Image)
</td>


</tr>
}



میشه کمکم کنید. خیلی مهمه.
ممنون

Moien Tajik
سه شنبه 28 شهریور 1396, 10:31 صبح
https://stackoverflow.com/a/4680966/6661314
https://stackoverflow.com/a/9819954/6661314

leilast
سه شنبه 28 شهریور 1396, 14:40 عصر
خب من مشکلم حل شد. اینجا میذارم تا اگر کسی لازم داشت استفاده کنه. بنظرم کاربرد خوبی داره.
ViewModel

public class AddProfileViewModel
{
public User Users { get; set; }
public File Files { get; set; }
}

Controller

[HttpGet]
public ActionResult ShowProp()
{
var db = new TestDBEntities2();


AddProfileViewModel VM = new AddProfileViewModel();

var ViewModel = from p in db.Users
join pd in db.Files on p.Username equals pd.Username
where pd.Username == p.Username
orderby p.Name
select new AddProfileViewModel { Users=p, Files=pd };
return View(ViewModel);
}



View


@model IEnumerable<MyTest.ViewModels.Admin.AddProfileViewModel>

<table class="table">
<tr>
<th>
نام
</th>
<th>
موبایل
</th>
<th>
عکس
</th>
<th></th>
</tr>

@foreach (var item in @Model)
{
<tr>
<td>@item.Users.Name</td>
<td>@item.Users.Mobile</td>
<td> @Html.ImageFor(modelitem => item.Files.Images, new { width = "80" }, "20170222_182113.jpg", "files", "uploadimages")</td>
</tr>
}}}
</table>


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