如何在另一个方法中调用两个linq查询 [英] How to call two linq queries in another method

查看:74
本文介绍了如何在另一个方法中调用两个linq查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我的存储库类中有两个查询,每个查询都调用不同的用户组。我想在下面的身份验证方法中调用这两个查询,但我不太确定,我将如何这样做呢?我目前有一个查询调用身份验证方法,但我想知道,我怎么能调用这两个查询。我是否需要将查询分组在一起,如果是,如何?



存储库类:

  public  Cust trial_test( string 用户名,字符串密码)
{
var query = from s in db.Subscriptions
join u 中.s.sUID上的db.UserDetails等于u.uID
其中 s.ExpiryDate > = DateTime.Now&&
s.sPID.Value == 163 &&
s.All.Value!= true &&
u.uUsername == username&&
u.uPassword ==密码
选择 u;
return query.FirstOrDefault();
}

public Cust full_test( string username, string password)
{
var query = 来自 s db.Subscriptions
join u db.UserDetails等于u.uID
其中​​ s.ExpiryDate > = DateTime.Now&&
s.sPID.Value == 163 &&
s.All.Value == true &&
u.uUsername == username&&
u.uPassword ==密码
选择 u;
return query.FirstOrDefault();
}





身份验证方法:

    Cust user = repository.trial_test(凭证[ 0 ],凭证[ 1 ]);  

if (user == null
{
var resp = new HttpResponseMessage(HttpStatusCode.Unauthorized )
{
Content = new StringContent( string .Format( 访问被拒绝)),
};
return 未经授权(请求);
}
else
{
IPrincipal principal = new GenericPrincipal( new GenericIdentity(user.Username,BasicAuthResponseHeaderValue), null );
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
}
return base .SendAsync(request,cancellationToken);





请帮忙。任何建议,将非常感谢。非常感谢。

解决方案

尝试在你的函数中使用可选参数这样



 public Cust trial_test(string username,string password,int group = 0)
{
if(group == 0)
{

var query =来自db.Subscriptions中的s
在s.sUID上的db.UserDetails中加入u等于u.uID
其中s.ExpiryDate> = DateTime.Now&&
s.sPID.Value == 163&&
s.All.Value!= true&&
u.uUsername == username&&
u.uPassword ==密码
选择你;
返回query.FirstOrDefault();
}
其他
{
var query =来自db.Subscriptions中的s
在s.sUID上的db.UserDetails中加入u等于u.uID
其中s.ExpiryDate> = DateTime.Now&&
s.sPID.Value == 163&&
s.All.Value == true&&
u.uUsername == username&&
u.uPassword ==密码
选择你;
返回query.FirstOrDefault();
}
}



Cust用户= repository.trial_test(凭证[0],凭证[1],组:1);



//将值1传递给组以执行第二个查询,否则它将调用第一个查询。


< blockquote>在两个查询中唯一的区别是

 s.All.Value!= true 

子句。如果是这种情况,那么下面的一个linq将起作用,考虑到s.All.Value是真还是假

 public Cust trial_test(字符串用户名,字符串密码,bool spidFlag )
{


var query =来自db.Subscriptions中的s
在s.sUID上的db.UserDetails中加入u等于u.uID
其中s.ExpiryDate> = DateTime.Now&&
s.sPID.Value == 163&&
s.All.Value == spidFlag&&
u.uUsername == username&&
u.uPassword ==密码
选择你;
返回query.FirstOrDefault();

}


Hi,

I have two queries in my repository class and each of them call different group of users. I would like to call the two queries in my authentication method below, but I am little unsure, how would I go about doing this so? I currently have one query calling authentication method below but I would like to know, how can I call both of the queries. Would I need to group my queries together, if so, how?

Repository class:

public Cust trial_test(string username, string password)
      {
          var query = from s in db.Subscriptions
                      join u in db.UserDetails on s.sUID equals u.uID
                      where s.ExpiryDate >= DateTime.Now &&
                      s.sPID.Value == 163 &&
                      s.All.Value != true &&
                      u.uUsername == username &&
                      u.uPassword == password
                      select u;
          return query.FirstOrDefault();
      }

      public Cust full_test(string username, string password)
      {
          var query = from s in db.Subscriptions
                      join u in db.UserDetails on s.sUID equals u.uID
                      where s.ExpiryDate >= DateTime.Now &&
                      s.sPID.Value == 163 &&
                      s.All.Value == true &&
                      u.uUsername == username &&
                      u.uPassword == password
                      select u;
          return query.FirstOrDefault();
      }



Authentication method:

Cust user = repository.trial_test(credentials[0], credentials[1]);

                if (user == null)
                {
                var resp = new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent(string.Format("access denied")),
                };
                return Unauthorized(request);
            }
            else
            {
                IPrincipal principal = new GenericPrincipal(new GenericIdentity(user.Username, BasicAuthResponseHeaderValue), null);
                Thread.CurrentPrincipal = principal;
                HttpContext.Current.User = principal;
            }
            return base.SendAsync(request, cancellationToken);



Please help. Any advice, would be very much appreciated. Many thanks.

解决方案

try to make use of optional parameter in your function like this

public Cust trial_test(string username, string password, int group = 0)
       {
           if (group == 0)
           {

               var query = from s in db.Subscriptions
                           join u in db.UserDetails on s.sUID equals u.uID
                           where s.ExpiryDate >= DateTime.Now &&
                           s.sPID.Value == 163 &&
                           s.All.Value != true &&
                           u.uUsername == username &&
                           u.uPassword == password
                           select u;
               return query.FirstOrDefault();
           }
           else
           {
               var query = from s in db.Subscriptions
                           join u in db.UserDetails on s.sUID equals u.uID
                           where s.ExpiryDate >= DateTime.Now &&
                           s.sPID.Value == 163 &&
                           s.All.Value == true &&
                           u.uUsername == username &&
                           u.uPassword == password
                           select u;
               return query.FirstOrDefault();
           }
       }



       Cust user = repository.trial_test(credentials[0], credentials[1],group:1);


//pass the value 1 to the group to execute the second query else it will call the first one.


in both the queries only difference is the

s.All.Value != true

clause. If this is the case then one linq like below will work, considering s.All.Value is either true or false

public Cust trial_test(string username, string password, bool spidFlag)
      {


              var query = from s in db.Subscriptions
                          join u in db.UserDetails on s.sUID equals u.uID
                          where s.ExpiryDate >= DateTime.Now &&
                          s.sPID.Value == 163 &&
                          s.All.Value == spidFlag &&
                          u.uUsername == username &&
                          u.uPassword == password
                          select u;
              return query.FirstOrDefault();

      }


这篇关于如何在另一个方法中调用两个linq查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆