我正在尝试使用LinqToSql选择多个列,但我很难用它。我是LinqToSql的新手。 当我选择1列时,我这样做:
string[] name = mycontext.Users.SingleorDefault(p => p.UserId == 1).UserName;
多列有什么相似之处吗?
我实际上想在Name
控件
Surname
和ListBox
答案 0 :(得分:1)
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中完成。