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

时间:2009-08-06 13:40:22

标签: nhibernate linq-to-sql

根据我的理解,使用像nHibernate这样的东西会返回一个像int这样的结果(比如返回一个计数)但是它不能从users表中返回2列或3列。

linq是否一样?

e.g。说我有包含列的Users表:UserID,用户名,密码,电子邮件,datecreated)

它可以仅返回UserID,密码,还是只返回整个行/实体/类?

感谢清除它。

4 个答案:

答案 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);