manoj1412012 Ответов: 1

Как назначить string builder запросу linq с помощью predicatebuilder


Всем привет,

Я новичок в 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();
           }
           return user1;
       }


таким образом, я получаю всех пользователей, использующих строковый конструктор

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


выходной СБ, как показано ниже

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


Итак, у меня есть предикат, как показано ниже

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


Итак, у меня есть запрос, где он используется для другой операции.поэтому я должен изменить только предикатную часть запроса, как показано ниже.

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()



поэтому в приведенном выше запросе я хочу предсказать следующее

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


заранее спасибо.

Что я уже пробовал:

Я попробовал сделать следующее

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

               }



и

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

F-ES Sitecore

Забудь пытаться сделать это таким образом. Стройте свой предикат по ходу дела, а не стройте строку в StringBuilder.

предикат = предикат.И(someCondition)

1 Ответов

Рейтинг:
8

Ahmed Raouf

Вам не нужно зацикливаться на именах пользователей. Вы можете сделать это в одной фразе:

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


manoj1412012

спасибо, Ахмед Рауф