使用linq到sql选择多个列

时间:2017-06-20 13:04:53

标签: c# asp.net linq linq-to-sql

我正在尝试使用LinqToSql选择多个列,但我很难用它。我是LinqToSql的新手。 当我选择1列时,我这样做:

string[] name = mycontext.Users.SingleorDefault(p => p.UserId == 1).UserName;

多列有什么相似之处吗? 我实际上想在Name控件

中分配SurnameListBox

3 个答案:

答案 0 :(得分:1)

使用Anonymous Types

var result = mycontext.Users.Where(p => p.UserId == 1)
                            .Select(c => new {c.UserName , c.Family ,...})
                            .SingleOrDefault();

答案 1 :(得分:0)

你不能返回用户对象吗?

var user = mycontext.Users.SingleorDefault(p => p.UserId == 1)

之后,您可以获得User的所有属性,而无需创建动态类型

答案 2 :(得分:0)

您当前的请求将查询整个用户(选择*)。

在大多数情况下,它就足够了,您可以单独访问每个列:

var user = mycontext.Users.SingleorDefault(p => p.UserId == 1);

var userName = user.Username;
var password = user.Password;
// etc...

如果您只需要一个(或多个列)但不需要整个用户,则可以这样做:

var userInfo = mycontext.Users.Where(p => p.UserId == 1).Select(p => new {p.UserName, p.Password}).SingleOrDefault();

var userName = userInfo.UserName;
var password = userInfo.Password;

如果你喜欢结果中的字符串集合,你可以这样做:

List<string> userInfo = mycontext.Users.Where(p => p.UserId == 1).Select(p => new List<string> { p.UserName, p.Password }).SingleOrDefault();

var username = userInfo[0];
var password = userInfo[1];

这样,生成的查询看起来像Select UserName, Password From UserTable。只有当你的表有很多列或者有很多列(例如blob)时,它才有用。

工作原理:首先调用Where扩展方法,告诉.NET不要立即运行查询。它将在SingleOrDefault电话上执行。但此时,查询已经完成,整个部分在SQL中完成。