Nhibernate LINQ2SQL可以返回几列,还是只返回实体或单列?

Nhibernate LINQ2SQL可以返回几列,还是只返回实体或单列?,nhibernate,linq-to-sql,Nhibernate,Linq To Sql,据我所知,使用nHibernate之类的工具将返回int这样的单个结果(比如返回计数),但它不能从users表返回2列或3列 林克也是这样吗 e、 g.假设我有一个Users表,其中包含以下列:UserID、username、password、email、datecreated) 它只能返回UserID、password,还是只能返回整行/实体/类 谢谢你把这个清理干净。它绝对可以做你喜欢的事情。尝试将这些字段返回为匿名类型。有关更多信息,请查看此。下面是一个例子: var twoFields

据我所知,使用nHibernate之类的工具将返回int这样的单个结果(比如返回计数),但它不能从users表返回2列或3列

林克也是这样吗

e、 g.假设我有一个Users表,其中包含以下列:UserID、username、password、email、datecreated)

它只能返回UserID、password,还是只能返回整行/实体/类


谢谢你把这个清理干净。

它绝对可以做你喜欢的事情。尝试将这些字段返回为匿名类型。有关更多信息,请查看此。下面是一个例子:

var twoFields = from c in db.Customers
                where c.ID == someCustomerID
                select new { ID = c.ID, Name = c.Name}

//use your new object called twoFields
Console.WriteLine(twoFields.Name);

它绝对可以做你喜欢的事。尝试将这些字段返回为匿名类型。有关更多信息,请查看此。下面是一个例子:

var twoFields = from c in db.Customers
                where c.ID == someCustomerID
                select new { ID = c.ID, Name = c.Name}

//use your new object called twoFields
Console.WriteLine(twoFields.Name);

通过以匿名类型返回结果,只能检索某些列。可以这样看:

var selectedUserId = 19;

var userInfo = from u in context.Users
where u.UserId == selectedUserId 
select new { u.UserId, u.Password };
如果不使用查询语法,也可能是这样:

var selectedUserId = 19;

var userInfo = context.Users
                      .Where(u => u.UserId == selectedUserId)
                      .Select(u => new { u.UserId, u.Password });

这将返回一个实例,您可以添加一个对该实例的调用或在该实例的末尾添加一个调用,以获取匿名类型的单个对象。

通过将结果作为匿名类型返回,您只能检索一些列。可以这样看:

var selectedUserId = 19;

var userInfo = from u in context.Users
where u.UserId == selectedUserId 
select new { u.UserId, u.Password };
如果不使用查询语法,也可能是这样:

var selectedUserId = 19;

var userInfo = context.Users
                      .Where(u => u.UserId == selectedUserId)
                      .Select(u => new { u.UserId, u.Password });

这将返回一个实例,您可以添加一个对匿名类型的单个对象的调用,或者在最后添加一个调用以获取匿名类型的单个对象。

是的,可以使用Linq to SQL完成,正如bdukes和pcampbell所示,但也可以使用NHibernate完成

例如,您可以执行以下查询,该查询将返回对象[]的列表:

var userData = session.CreateQuery(
    "select u.Username, u.Password from User u").List();
如果您想,您可以只选择一些字段,但仍然可以返回一个实体,这样您就不必弄乱对象数组。这也可以通过HQL和Critera实现

例如,如果用户类具有采用用户名和密码的构造函数:

var users = session.CreateQuery(
    "select new User(u.Username, u.Password) from User u").List<User>();
var users=session.CreateQuery(
从用户列表()中选择新用户(用户用户名、用户密码);

是的,它可以通过Linq到SQL来完成,正如bdukes和pcampbell所示,但也可以通过NHibernate来完成

例如,您可以执行以下查询,该查询将返回对象[]的列表:

var userData = session.CreateQuery(
    "select u.Username, u.Password from User u").List();
如果您想,您可以只选择一些字段,但仍然可以返回一个实体,这样您就不必弄乱对象数组。这也可以通过HQL和Critera实现

例如,如果用户类具有采用用户名和密码的构造函数:

var users = session.CreateQuery(
    "select new User(u.Username, u.Password) from User u").List<User>();
var users=session.CreateQuery(
从用户列表()中选择新用户(用户用户名、用户密码);

NHibernate也可以这样做:

var selectedUserId = 19;

var userInfo = from u in session.Linq<Users>()
where u.UserId == selectedUserId 
select new { Id = u.UserId, Password = u.Password };
var selectedUserId=19;
var userInfo=来自会话中的u.Linq()
其中u.UserId==selectedUserId
选择新{Id=u.UserId,Password=u.Password};
它不能做的是返回一个带有延迟加载列的用户实体。我不知道LINQtoSQL是否可以延迟加载单个列


这是一个投影。NHibernate也可以这样做:

var selectedUserId = 19;

var userInfo = from u in session.Linq<Users>()
where u.UserId == selectedUserId 
select new { Id = u.UserId, Password = u.Password };
var selectedUserId=19;
var userInfo=来自会话中的u.Linq()
其中u.UserId==selectedUserId
选择新{Id=u.UserId,Password=u.Password};
它不能做的是返回一个带有延迟加载列的用户实体。我不知道LINQtoSQL是否可以延迟加载单个列


这是一个投影。

你能用nhibernate做到吗?实际上,它将选择new myNewTwoFields(){…},然后选择twoFields.SingleOrDefault().Name:)实际上SingleOrDefault可以返回null。所以twoFields.SingleOrDefault().Name不太合适:)你能用nhibernate做这件事吗?实际上是选择new myNewTwoFields(){…},然后选择twoFields.SingleOrDefault().Name:)实际上SingleOrDefault可以返回null。因此,twoFields.SingleOrDefault().Name不太合适:)