NHibernate .SelectList()与C#中的List <string>

时间:2018-06-19 09:15:08

标签: c# sql linq nhibernate

我有一个数据库请求,如下所示:

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>进行动态更改。

如何实现这一目标?

1 个答案:

答案 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",... }