我有一个数据库请求,如下所示:
var userHasProfessions = xy.GetUserProfessions();
var users = sessionService.GetDefaultSession()
.Query<User>()
.Where(a => userProfessions.Contains(a.Profession.Id))
.ToList();
根据自己的职业,允许请求用户查看所有用户。现在我想再限制一点,他只能看到用户的一些属性。让我们举个例子:
id -> yes
firstname -> yes
lastname -> yes
address -> no!
现在我尝试将查询更改为:
var userHasProfessions = xy.GetUserProfessions();
var users = sessionService.GetDefaultSession()
.QueryOver<User>()
.SelectList(list => list
.Select(a => a.id)
.Select(a => a.firstname)
.Select(a => a.lastname))
.Where(a => userProfessions.Contains(a.Profession.Id))
.ToList();
现在我的问题......有没有办法,例如,创建一个具有这些属性的新列表,然后循环它?这样的事情:
List<string> attributes = new List<string>(){"id", "firstname", "lastname"}
var userHasProfessions = xy.GetUserProfessions();
var users = sessionService.GetDefaultSession()
.QueryOver<User>()
.SelectList(
//loop through attributes
)
.Where(a => userProfessions.Contains(a.Profession.Id))
.ToList();
提前致谢: - )
修改
让我的问题更清楚一点。我想拥有允许用户查看的属性,可以从查询外的List<string>
进行动态更改。
如何实现这一目标?
答案 0 :(得分:0)
你可以做到
.Where(a => userProfessions.Contains(a.Profession.Id))
.Select(c => new User {
id = c.id,
firstname = c.firstname,
lastname = c.lastname,
address c.address
}).ToList();
我假设列表是User
的类型。其他明智的你可以使用匿名返回i.d. c => new { id="id",... }