根据我的理解,使用像nHibernate这样的东西会返回一个像int这样的结果(比如返回一个计数)但是它不能从users表中返回2列或3列。
linq是否一样?
e.g。说我有包含列的Users表:UserID,用户名,密码,电子邮件,datecreated)
它可以仅返回UserID,密码,还是只返回整个行/实体/类?
感谢清除它。
答案 0 :(得分:2)
您可以通过将结果作为匿名类型返回来仅检索某些列。这看起来像这样:
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 });
这将返回IQueryable个实例,您可以在最后添加对.SingleOrDefault()
或.FirstOrDefault()
的调用,以获取匿名类型的单个对象。
答案 1 :(得分:2)
是的,可以使用Linq to SQL,就像bdukes和pcampbell所示,但也可以使用NHibernate来完成。
例如,您可以执行以下查询,该查询将返回object []:
的列表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>();
答案 2 :(得分:2)
NHibernate也可以这样做:
var selectedUserId = 19;
var userInfo = from u in session.Linq<Users>()
where u.UserId == selectedUserId
select new { Id = u.UserId, Password = u.Password };
它不能做的是返回一个带有延迟加载列的User实体。我不知道Linq to SQL是否可以延迟加载单个列。
这是一个投射。
答案 3 :(得分:1)
绝对可以做你喜欢的事。尝试将这些字段返回到匿名类型。有关详细信息,请查看此article by Scott Guthrie on Anonymous Types。这是一个例子:
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);