如何在另一个方法中调用两个linq查询

编程入门 行业动态 更新时间:2024-10-10 04:26:15
本文介绍了如何在另一个方法中调用两个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传递给组以执行第二个查询,否则它将调用第一个查询。

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

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查询

本文发布于:2023-10-31 06:45:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1545329.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两个   方法   如何在   linq

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!