如何在另一个方法中调用两个linq查询 [英] How to call two linq queries in another method
问题描述
我的存储库类中有两个查询,每个查询都调用不同的用户组。我想在下面的身份验证方法中调用这两个查询,但我不太确定,我将如何这样做呢?我目前有一个查询调用身份验证方法,但我想知道,我怎么能调用这两个查询。我是否需要将查询分组在一起,如果是,如何?
存储库类:
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 thes.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查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!