我很难获得 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/

10-14 16:57
查看更多