【问题标题】:How do I return a generic list with QueryOver如何使用 QueryOver 返回通用列表
【发布时间】:2015-05-07 14:10:47
【问题描述】:

我正在尝试使用 queryover 进行简单的选择并获得一个通用列表。

我只想从表中获取usernameemailfirstname,并省略其余部分。

这是我的代码:

public IList<Users> GetAllByRole(string role)
{
    var users= this.Session.QueryOver<Users>()
        .where(f => f.role == role)
        .select(f => f.username)
        .select(f => f.email)
        .select(f => f.firstname)
        .list<Users>();

    return users;
}

错误:

The value \"x\" is not of type \"Model.Poco.Entities.Users\" and cannot be used in this generic collection.\r\nParameter name: value

SQL 查询会是这样的

SELECT [username]
  ,[email]
  ,[firstname]
FROM [MyDB].[dbo].[MyTable]
WHERE [role] = 'admin'

我也尝试过类似的方法

IList<Users> users = this.Session.QueryOver<Users>()
            .Where(p => p.role == role)
            .SelectList(list => list
                    .Select(p => p.username)
                    .Select(p => p.email)
                    .Select(p => p.firstname)
            )
            .List<Users>();
return users;

错误:

The value \"System.Object[]\" is not of type \"Poco.Entities.Users\" and cannot be used in this generic collection.\r\nParameter name: value

【问题讨论】:

    标签: c# .net generics nhibernate queryover


    【解决方案1】:

    我们需要为每一列添加 1) aliases 并使用 2) 转换器:

    // Users u - will serve as an alias source below
    Users u = null;
    IList<Users> users = this.Session.QueryOver<Users>()
            .Where(f => f.role == role)
            .SelectList(list => list        // here we set the alias 
                    .Select(p => p.username) .WithAlias(() => u.username)
                    .Select(p => p.email)    .WithAlias(() => u.email)
                    .Select(p => p.firstname).WithAlias(() => u.firstname)
            )
            // here we Transform result with the aliases into Users
            .TransformUsing(Transformers.AliasToBean<Users>())
            .List<Users>();
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多