PDA

View Full Version : سوال: بازیابی اطلاعات



aroshanzamir
شنبه 11 بهمن 1393, 14:02 عصر
سلام دوستان وقت بخیر
از EF Code First استفاده می کنم
من دو کلاس زیر را دارم :


public class Role
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public virtual List<User> Users { get; set; }


}
public class User
{
public int UserId { get; set; }
public string UserName { get; set; }
public string UserEmail { get; set; }
public string UserPhone { get; set; }
public virtual List<Role> Roles { get; set; }
}



public class UserViewModel
{
public int UserId { get; set; }
public string UserName { get; set; }
}



Id یکی از Role های من مثلا 10 است .. حالا می خواهم Roleی را با Id=10 بازگشت بدهم .. حالا در صورتی که Roleی با این Id را بازگشت دهم تمام User های آن هم بازگشت داده می شود ...


db.Roles.Where(x=> x.RoleId==10).Select(x =>x.Users).ToList()


در این حالات تمام فیلد های هر User مر بوط به این Role هم بازگشت داده می شود .. در صورتی که فقط یک سری از از فیلد های کلاس User را بخواهم باید چکار کنم

ممنون

RIG000
شنبه 11 بهمن 1393, 21:48 عصر
var dbe = context.Users.Where(u => u.PersonId == 10).Select(p => p.Products.Select(c => c.ProductId,c.PersonUserName,c.PersonPassword));

aroshanzamir
یک شنبه 12 بهمن 1393, 08:14 صبح
سلام دوست من RIG000

وقت شما بخیر : شما خودتون این کار را انجام دادید و جواب گرفتید ؟
در اینجا ارتباط چند به چند داریم و در صورتی که از این دستور شما استفاده کنیم با خطا مواجه می شویم به دلیل اینکه خروجی متد اصلی ما مثلا List<xx>

است در صورت استفاده از دستوری شما نوشتید و خودم هم قبلا این امتحان را کرده بودم میشه :


db.Roles.Where(x=> x.RoleId==10).Select(x =>x.Users.Select(p=> new UserViewModel { UserId=p.UserId , UserName=p.UserName })).ToList()
//List<IEnumrable<UserViewModel>>



//List<IEnumrable<UserViewModel>>: نوع خروجی
وقتی موس را روی خطا ببریم میگه خروجی شما اینه.. درست داره میگه ما دو تا Select تو در تو زدیم

در ارتباط یک به چند جواب میده ولی چند به چند نه ...try it


/

هدف اصلی اینه که تا قبل از ارسال کوئری اطلاعات را فیلتر کنیم و گرنه بعد از دریافت اطلاعات براحتی می توان فیلتر کرد : مهم قبل از ارسال است ...

/

ممنون دوست گرامی