我的存储库类中有两个查询,每个查询都调用不同的用户组。我想在下面的身份验证方法中调用这两个查询,但我不太确定,我将如何这样做呢?我目前有一个查询调用身份验证方法,但我想知道,我怎么能调用这两个查询。我是否需要将查询分组在一起,如果是,如何? 存储库类:
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传递给组以执行第二个查询,否则它将调用第一个查询。
在两个查询中唯一的区别是
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 != trueclause. 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查询
发布评论