如何使用谓词生成器将字符串生成器分配给linq查询 [英] How to assign string builder to linq query with predicatebuilder

查看:82
本文介绍了如何使用谓词生成器将字符串生成器分配给linq查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HI全部,



我是Linq的新手,所以我在这个问题上请求你的帮助。



所以我有方法返回用户列表,如下所示



 var usernames = getuser(userID.ToString() ); 





getuser方法如下所示



 public static List< string> GetUser(string id)
{

List< string> user1 = new List< string>();
if(!string.IsNullOrWhiteSpace(id))
{
getUser repository = new getUser();
user1 = repository.GetUserbyid(id);
repository.Dispose();
}
返回user1;
}





所以我让所有用户使用字符串生成器



 foreach(用户名中的var项)
{sb.AppendLine(p.username.Contains(+ item.ToString()。ToLower()+)+ ||); }





sb的输出如下所示



 {p.CreatedBy.Contains(011)|| p.CreatedBy.Contains(009)|| p.CreatedBy.Contains(0000000010)} 





所以我有一个谓词,如下所示



 var predictate = PredicateBuilder.True< Getuserdeatils>(); 





所以我有查询用于不同的操作。所以我只需要更改查询的预测部分,如下所示。



 var query =(来自sr in context.Getuser.AsExpandable()。其中​​(预测)
在上下文中加入wi。 sr.CreatedBy上的UserProfiles等于w1.UserName到list1
来自list1.DefaultIfEmpty()中的l1。







所以在上面的查询中我想预测如下



 predictate = predictate.And(p => p.username。包含(010)|| p.username.Contai ns(011)|| p.username.Contains(009)); 





提前感谢。



我尝试过的事情:



我试过以下



 foreach(用户名中的var项)
{
predictate = predictate.And(p => p.CreatedBy.Contains(item.ToString()));

}











 predictate = predictate.And(p =>((bool.Parse(sb.ToString())))); 

解决方案

您不需要循环访问用户名。你可以用一个短语来做:

 predicate = predicate.And(p => usernames.Contains(p.CreatedBy)); 


HI All,

I am new to Linq so I request for your help me in this issue.

so I have methods which return a list of the user as shown below

var usernames = getuser(userID.ToString());



getuser method as show below

public static List<string> GetUser(string id)
       {

           List<string> user1 = new List<string>();
           if (!string.IsNullOrWhiteSpace(id))
           {
               getUser repository = new getUser();
               user1 = repository.GetUserbyid(id);
               repository.Dispose();
           }
           return user1;
       }



so I am getting all the users using the string builder

foreach (var item in usernames)
   { sb.AppendLine("p.username.Contains("+ item.ToString().ToLower()+")" + "||"); }



the output of sb as shown below

{p.CreatedBy.Contains(011)||p.CreatedBy.Contains(009)||p.CreatedBy.Contains(0000000010)}



so I have a predicate as shown below

var predictate = PredicateBuilder.True<Getuserdeatils>();



so I have the query where it used for the different operation.so I have to changed only the predictate part of the query as shown below.

var query = (from sr in context.Getuser.AsExpandable().Where(predictate)
                             join wi in context.UserProfiles on sr.CreatedBy equals wi.UserName into list1
                             from l1 in list1.DefaultIfEmpty()




so in the above query i want predictate as following

predictate = predictate.And( p => p.username.Contains("010") ||p.username.Contains("011") || p.username.Contains("009"));



thanks in advance.

What I have tried:

I have tried as follwoing

foreach (var item in usernames)
               {
        predictate = predictate.And(p =>p.CreatedBy.Contains(item.ToString()));

               }




and

predictate = predictate.And(p =>((bool.Parse(sb.ToString()))));

解决方案

You don't need to loop for usernames. You can do it in a single phrase:

predicate = predicate.And(p => usernames.Contains(p.CreatedBy));


这篇关于如何使用谓词生成器将字符串生成器分配给linq查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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