我很难获得 LINQ 语法。我怎样才能以更好的方式执行此命令?
var user = (from u in context.users
where u.email.Equals(email)
select u).Single();
var pinToUser = (from ptu in context.pintousers
where ptu.user_id.Equals(user.id)
select ptu).Single();
var pin = (from p in context.pins
where p.idpin.Equals(pinToUser.pin_idpin)
select p).Single();
return pin;
如您所见,有一个表用户,一个表pintouser和一个表pin。 Pintouser 引用 user 和 pin。是否可以写一些像“user.pintouser.pin”这样的简短内容?我想我已经设置了所有导航属性,但是我不确定如何正确使用它们,或者不确定是否可以通过修改来使它们更好。
谢谢阅读
最佳答案
使用联接将所有内容重写为一个简单的查询。如果我正确阅读了您的查询,这应该会给您正确的结果:
var pin = (from u in context.users
join ptu in context.pintousers on u.id equals ptu.user_id
join p in context.pins on ptu.pin_idpin equals p.idpin
where u.email == email
select p).Single();
但请记住,如果此查询返回的不是单个结果,您的代码将抛出异常。
如果您想处理获取一行或不获取行的可能性,那么您应该使用
SingleOrDefault()
。如果您想处理获取任意行数的可能性,那么您应该真正使用
FirstOrDefault()
。关于c# - 使LINQ查询更好,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3556369/