PDA

View Full Version : سوال: Join دو جدول در view model



gama_slv
جمعه 27 تیر 1393, 18:18 عصر
در asp.net برای کار بر روی دیتا ها از متد هایی در لایه دیتابس استفاده میکردم مثلا برای join کردن دو جدول و استفاده از فیلد های خاصی از دو جدول
در mvc از view model برای ترکیب جداول استفاده میکنم
میخوام فقط دو جدول رو join کنم و برا اساس id یکی از جداول که با Request.QueryString فیلتری بروی دیتا اعمال کنم
مثلا linq زیر
from acn in db.Acnjoin user in db.User on acn.UserID equals user.UserID
select new {
UserID = user.UserID,
user.Name,
user.Family,
acn.Stock,
acn.IsSaye
}

یا lambda کوئری بالا ولی نمی دونم بهترین جایی که باید این کا رو بکنم کجاست تو Model یا control
تو model معمولا یکی از دو روش زیر رو استفاده میکنم تا حالا linq یا lambda توش ننشوتم
public IEnumerable<Products> Products { get; set; }
public IEnumerable<ProductDown> ProductDown { get; set; }
یا
[Key] public int UserID { get; set; }
[Display(Name = "نام")]
public string Name { get; set; }


[Display(Name = "نام خانوادگی")]
public string Family { get; set; }


[Display(Name = "موجودی")]
[DisplayFormat(ApplyFormatInEditMode = false, DataFormatString = "{0:#,0 ريال}")]
public int Stock { get; set; }
لطفا راهنمایی کنید

helpsos
شنبه 28 تیر 1393, 08:49 صبح
ببین این کارها اگه بخوای که قانونی و استاندارد استفاده بشه باید در لایه سرویس نوشته بشه ولی اگه از روش هر دم بیل استفاده می کنی باید در اکشن های خود در کنترلر این کدها نوشته شود.
و مطلب دیگه این که وقتی داریم از Entity FrameWork استفاده می کنیم چنانچه خواص راهبردی به خوبی تعریف شده باشند با نوشتن دستور Include می توان عمل Join را انجام داد و دیگه نیاز به دستورات Linq ندارید.
برای اطلاعات بیشتر به سایت www.DotNetTips.info مراجعه و قسمت آموزشهای EFCF را مطالعه کنید.

helpsos
شنبه 28 تیر 1393, 08:51 صبح
و نیز اینکه هیچ آدم برنامه نویسی نمیاد و مدلش را این طوری خراب کنه . در مدل فقط فیلدها و خواص راهبری تعریف میشه و DataAnnotation ها باید در ViewModel ها تعریف شوند.

jafar01
شنبه 28 تیر 1393, 11:06 صبح
سلام برای join د و جدول یا بیشتر شما مگه جدول هاتو تو دیتا بیس نمیسازی ؟؟؟؟ درست
شما برای اتصال از سایت با دیتا از مدل EntitiyFramwork استفاده نمیکنی ؟ درسته
پس خودش میخای رابطه برقرار کنی برات Entitiy ADO.net برای متا دیتا هاشو میسازه در واقع مدلشو میسازه
اما چطور من یک کوئری join بزنم ؟؟؟ خوب تو بخش کنترلش .......... همین به این خوشمزگی هر چی دوست داشتی بزن بعد پاس بده به ویو چطوری ؟
خوب ویو مورد نطر خود با استفاده راس کلیک Add View بساز همین

gama_slv
شنبه 28 تیر 1393, 17:57 عصر
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,
Stock = ac.Stock
}).Take(3).ToList();


return View(ListMember);
}

اگر بخوام در Model از
public IEnumerable<Products> Products { get; set; }
public IEnumerable<ProductDown> ProductDown { get; set; }
استفاده کنم عبارت
select new MemberViewModels {
UserID = us.UserID,
Name = us.Name,
Stock = ac.Stock
}).Take(3).ToList();
به چه کدی تغییر بدم
میخوام مشخصات کاربر یک رکورد تکی مثل اکشن detail خود mvc به همراه لیستی از حساب های یک کاربر در یک view نشون بدم