شرط گذاشتن برای چند جدولی که باهم include شدن
سلام دوستان
من سه جدول دارم که به هم ارتباط دارند میخوام در متدی فقط userهایی رو برگردونم که نقش به عنوان مثال مدیر دارند ممنون میشم راهنمایی کنید . در انتها متد رو نوشتم .
public class Role {
[Key]
public int RoleId { get; set; }
[DisplayName("عنوان نقش")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string RoleTitle { get; set; }
[Display(Name = "نام نقش")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string RoleName { get; set; }
public bool IsDelete { get; set; }
#region Relation
public virtual List<UserRole>UserRoles { get; set; }
public List<RolePermission>RolePermissions { get; set; }
#endregion
}
[Key] public int UserId { get; set; }
[DisplayName("نام کاربری")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string UserName { get; set; }
[DisplayName("ایمیل")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
[EmailAddress(ErrorMessage = "ایمیل وارد شده معتبر نمی باشد.")]
public string Email { get; set; }
[DisplayName("کلمه عبور")]
[Required(ErrorMessage = "لطفا {0} را وارد کنید.")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string Password { get; set; }
[DisplayName("کد فعال سازی")]
[MaxLength(200, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string ActiveCode { get; set; }
[DisplayName("وضعیت")]
public bool IsActive { get; set; }
[DisplayName("آواتار")]
[MaxLength(400, ErrorMessage = "{0} نمی تواند بیشتر از {1} کاراکتر باشد.")]
public string UserAvatar { get; set; }
[DisplayName("تاریخ ثبت نام")]
public DateTime RegisterDate { get; set; }
public bool IsDelete { get; set; }
#region Relation
public virtual List<UserRole> UserRoles { get; set; }
public virtual List<Wallet.Wallet> Wallets { get; set; }
public virtual List<Course.Course> Courses { get; set; }
//public virtual List<Article.Article> Articles { get; set; }
//public virtual List<Order.Order> Orders { get; set; }
//public virtual List<UserCourse> UserCourses { get; set; }
//public List<UserDisCountCode> UserDisCountCodes { get; set; }
public virtual List<CourseComment> CourseComments { get; set; }
#endregion
}
public class UserRole
{
[Key]
public int UR_Id { get; set; }
public int UserId { get; set; }
public int RoleId { get; set; }
#region Relation
public virtual UncoLearn.Data.Entities.User.User User { get; set; }
public virtual Role Role { get; set; }
#endregion
public List<SelectListItem> GetEducatorForManageCourse(string roleName)
{
return _context.Users.Include(u => u.UserRoles).ThenInclude(r => r.Role).Select(d => new SelectListItem()
{
Text = d.UserName,
Value = d.UserId.ToString()
}).ToList();
}
نقل قول: شرط گذاشتن برای چند جدولی که باهم include شدن
سلام از کلاسهای خود Identity استفاده کن
هر جا که لازم داشتی همونها رو override کن اینطوری راحتتری مشکلاتت هم کمتر میشه
متدی که نوشتی توش شرط نگذاشتی که چی رو برگدونه. من معمولا برای جستجو از نشاسه استفاده میکنم
این متدی هست که خودم استفاده میکنم.
ابتدا
public async Task<List<UsersViewModel>> GetUsersInRoleAsync(string RoleId)
{
var userIds = (from r in Roles
where (r.Id == RoleId)
from u in r.Users
select u.UserId).ToList();
return await _userManager.Users.Where(user => userIds.Contains(user.Id))
.Select(user => new UsersViewModel
{
Id = user.Id,
Email = user.Email,
UserName = user.UserName,
PhoneNumber = user.PhoneNumber,
FirstName = user.FirstName,
LastName = user.LastName,
BirthDate = user.BirthDate,
IsActive = user.IsActive,
Image = user.Image,
RegisterDateTime = user.RegisterDateTime,
Roles = user.Roles.Select(u => u.Role.Name),
}).AsNoTracking().ToListAsync();
}