如何将这些linq查询合并为一个?

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.Usersaspnet_Users
dc.Membershipaspnet_Membership

另外,SingleOrDefault和之间有什么区别FirstOrDefault

Mat*_*son 5

不确定他们是否有关系(他们应该).如果他们这样做,那么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()并且有两个项目与查询匹配,那么将选择第一个.