View Full Version : لیست کاربرانی که به یک نقش وابسته اند
  
sunn789
جمعه 17 بهمن 1393, 12:36 عصر
سلام
چه جوری میتونم لیست کاربر ها رو که به یک نقش وابسته اند دریافت کنم 
از این کد استفاده کردم اما برگشتیم فقط کد بود نه نام کاربران
var role = (from r in db.Roles where r.Name.Contains("Customer") select r).FirstOrDefault();
db.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(role.Id))
public List<ApplicationUser> GetUsersInRole(string roleName)
{
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new  ApplicationDbContext()));
        var role = roleManager.FindByName(roleName).Users.First();
        var usersInRole = Users.Where(u => u.Roles.Select(r => r.RoleId).Contains(role.RoleId)).ToList();
        return usersInRole;
}
برگشتی :
System.Data.Entity.DynamicProxies.ApplicationUser_ 3693192318EE31B59F664B2BC5F167AE1B1CDF8C70C5144258 25567AB7686EE4
r4hgozar
جمعه 17 بهمن 1393, 13:46 عصر
سلام.
یه مدت خودم رو کشتم ارتباط چند به چند رو یاد بیرم.
var newmodel = _db.Users.Include(x => x.UserName).Where(i => i.roleid == roles);
ور roleid رو از ورودی بگیرین.
فکر کنم همین رو بخواین.
r4hgozar
جمعه 17 بهمن 1393, 13:55 عصر
البته میشه جور دیگه هم نوشت. یعنی از جدول role دنبال user ها گشت. اما اخر باید کاری کرد که تکراری ها رو نشون نده.چون اخ چند به چند باشه در جدول واست یه ازای هر user امکان داره چند تا role باشد.
موفق باشید
RIG000
جمعه 17 بهمن 1393, 16:15 عصر
var selectRoleId = (from rd in db.Roles                               where rd.RoleName = "customer"
                               select rd.RoleID).FirstOrDefault();
            var selectWithRoleId = (from cs in db.Users
                                    where cs.RoleID == selectRoleId
                                    select cs
                                      ).ToList();
RIG000
جمعه 17 بهمن 1393, 16:23 عصر
var join = (from rd in db.Roles                        where rd.RoleName == "customer"
                       join cs in db.Users
                       on rd.RoleID equals cs.RoleID
                       select cs).ToList();
sunn789
جمعه 17 بهمن 1393, 20:22 عصر
سلام.
یه مدت خودم رو کشتم ارتباط چند به چند رو یاد بیرم.
var newmodel = _db.Users.Include(x => x.UserName).Where(i => i.roleid == roles);
ور roleid رو از ورودی بگیرین.
فکر کنم همین رو بخواین.
خوب i.roleid وجود نداره . پس به i.Roles تغییر دادم و متاسفانه ID نداره 
جواب نداد
RIG000
جمعه 17 بهمن 1393, 23:14 عصر
خوب i.roleid وجود نداره . پس به i.Roles تغییر دادم و متاسفانه ID نداره 
جواب نداد
من اون دوتایی که نوشتم جواب داد. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
شما میگی roleid  نداشت! roleid فیلد شماست! از جایی دیگه نمیاد که! 
کد های من مورش چی بود!؟ به دوشکل نوشتم. یا من سوال شما رو نفهمیدم یا اینکه چیز هایی هست که من بلد نیستم ؟
sunn789
شنبه 18 بهمن 1393, 19:43 عصر
نه دوست عزیز اول اینکه متشکر کمک میکنید دوم اینکه من از user خود mvc استفاده میکنم متاسفانه زمانی "i" رو میزنم roleId نمایش داده نمیشه فقط role نمایش داده میشه .
ولی هنوز برای من حل نشده .
RIG000
یک شنبه 19 بهمن 1393, 00:08 صبح
roleid باید یکی از فیلد های user باشه مهندس. یعنی الان db.users رو میزنی یکی از فیلد های این یوزر باید roleid  باشه . ایا داری جز فیلد هات؟
sunn789
شنبه 25 بهمن 1393, 12:56 عصر
سلام دوستان 
لطف کردین اما، بر اساس پیشفرض mvc  کاربر در یک جدول ذخیره میشه و نقشها در یک جدول جداگانه و یک جدول جدا هم که دو ستون داره نام کاربر و نقش رو به هم ارتباط میده .
یعنی توی جدول user  ، ما  RoleId  نداریم ،
پیشنهادی دارین یا میشه اشتباه من رو تصحیح کرد؟
RIG000
شنبه 25 بهمن 1393, 13:08 عصر
فکر نکنم اصلا این موضوع جالب باشه که سه جدولی شده ....
حالا یه کاری می کنیم از اونجایی که اسم کاربر تو جدول دو ستون داری میاد ما فقط باید از همین جدول و جدول نقش ها استفاده کنیم. چون دیگه user رو نیاز نداریم. (هر چند که موندم چرا اسم یوزر رو تو دو جدول چرا اوردیم!!!!!!) 
شما با یه Select  بین جدول (دو ستونه (ID , UserName ))  و Roles میزنید  . 
در ضمن اگر شد جداول رو اینجا بذارید ببینیم
sunn789
شنبه 25 بهمن 1393, 14:06 عصر
سلام 
خوب در مورد جدول اگر پروژه شاده mvc  ساخته اید بر همین اساس خواهد بود ، اما ما میخواهیم نام کاربران را در لیست باز شو نمایش بدیم ، از طرفی ای دی کاربر در جدول نقشها با ای دی نقشها ارتباط برقرار میکنه
RIG000
شنبه 25 بهمن 1393, 14:22 عصر
میشه ارتباطات و جداول رو برام اینجا بنویسید؟ 
اسم جدول فیلد ها و ارتباطات؟
mahdisg
یک شنبه 04 مرداد 1394, 12:37 عصر
فکر نکنم اصلا این موضوع جالب باشه که سه جدولی شده ....
حالا یه کاری می کنیم از اونجایی که اسم کاربر تو جدول دو ستون داری میاد ما فقط باید از همین جدول و جدول نقش ها استفاده کنیم. چون دیگه user رو نیاز نداریم. (هر چند که موندم چرا اسم یوزر رو تو دو جدول چرا اوردیم!!!!!!) 
شما با یه Select  بین جدول (دو ستونه (ID , UserName ))  و Roles میزنید  . 
در ضمن اگر شد جداول رو اینجا بذارید ببینیم
جدول سوم رابطه بین کاربر و نقش هاست
و این برای اینه که هر کاربر میتونه چندتا نقش داشته باشه
salar IT man
یک شنبه 04 مرداد 1394, 13:01 عصر
سلام
چه جوری میتونم لیست کاربر ها رو که به یک نقش وابسته اند دریافت کنم 
از این کد استفاده کردم اما برگشتیم فقط کد بود نه نام کاربران
var role = (from r in db.Roles where r.Name.Contains("Customer") select r).FirstOrDefault();
db.Users.Where(x => x.Roles.Select(y => y.RoleId).Contains(role.Id))
public List<ApplicationUser> GetUsersInRole(string roleName)
{
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new  ApplicationDbContext()));
        var role = roleManager.FindByName(roleName).Users.First();
        var usersInRole = Users.Where(u => u.Roles.Select(r => r.RoleId).Contains(role.RoleId)).ToList();
        return usersInRole;
}
برگشتی :
System.Data.Entity.DynamicProxies.ApplicationUser_ 3693192318EE31B59F664B2BC5F167AE1B1CDF8C70C5144258 25567AB7686EE4
به صورت زیر عمل کنید.
var dbContext=new ApplicationDbContext();
var roleUserIdsQuery=from role in dbContext.Roles
		where role.Name==roleName
		from user in role.Users
		select user.UserId;
var users=dbContext.Users.where(u=>roleUserIdsQuery.Contain(u.Id)).Tolist();
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.