Xai*_*oft 0 c# linq linq-to-sql
作为LINQ的新手,我创建了几个查询,并希望将它们组合成一个,但我不知道该怎么做.他们来了:
var u = dc.Users.Where(w => w.UserName == userName).SingleOrDefault();
var m = dc.Memberships.Where(w => w.UserId == u.UserId).SingleOrDefault();
m.PasswordQuestion = securityQuestion;
m.PasswordAnswer = securityAnswer;
dc.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
dc.Users是aspnet_Users表
dc.Membership是aspnet_Membership表
另外,SingleOrDefault和之间有什么区别FirstOrDefault?
不确定他们是否有关系(他们应该).如果他们这样做,那么linq-to-sql设计器将为您提供成员资格对象上的User属性(或者相反).然后你可以这样写:
var membership = dc.Memberships.Where(x => x.User.UserName == userName).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
如果他们没有关系,你可以这样写:
var membership = (from m in dc.Membership join u in dc.Users on u.UserId equals m.UserId
where u.UserName == userName
select u).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
SingleOrDefault()和FirstOrDefault()之间的区别在于SingleOrDefault()假定只有一个项目与查询匹配.如果两个项匹配查询,则会抛出异常.如果您使用FirstOrDefault()并且有两个项目与查询匹配,那么将选择第一个.