c# преобразование строки Linq - PullRequest
0 голосов
/ 06 января 2020

Я хотел бы отправить группу идентификаторов или нуль в этот репозиторий и вернуть его полный список или список, содержащий идентификаторы.

Каков наилучший способ сделать это? значение наборов элементов управления пользовательского интерфейса будет выглядеть примерно так: «1411,1413», но когда значение отсутствует, я хочу вернуть все данные. Это как мне нужно или после Contains

UI   
    if ($('#ddlGuidelines').val()) {
            selectedGuidelineIds = $('#ddlGuidelines').val().toString();
        }

        $.ajax({
            type: "POST",
            url: '/Public/Reports/Handlers/Downloads.ashx',
            data: { GuidelineIds": selectedGuidelineIds, "Action": "ByLinkTypes" },

middle Teir

 public Nullable<int> Id{ get; set; }

    public Model.FilterOptions GetOptionsByIds(List<int?> Ids)
    {

        using (var db = new DLEntities())
        {
            var list = (from pg in db.list
                              where Ids.Contains(pg.Id)

1 Ответ

2 голосов
/ 07 января 2020

LINQ хорош, потому что он откладывает выполнение до тех пор, пока результат не будет использован. Это означает, что вы можете условно связать вещи воедино, и фактический запрос не будет выполнен до тех пор, пока он не понадобится.

Итак, возвращаясь к исходному коду, вы можете сделать что-то вроде этого (предполагая, что фильтр что-то вроде "1 , 2,3 "):

public Model.FilterOptions GetOptionsById(string filter)
{
    using (var db = new DLEntities())
    {
          var list = db.Select(item => item);  // Just get the entire list by default 

          // If the filter is provided
          if (! string.IsNullOrWhitespace(filter))
          {
              // If you cannot insure that your filter is valid...
              // SomeValidationMethod();

              // Split the filter string into a list of strings, 
              // and then parse each of those strings into an int,
              // returning the whole thing in an anonymous IEnumerable<int>
              var intFilter = filter.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                    .Select(int.Parse);

              // Finally, filter the list by those integers
              list = list.Where(item => intFilter.Contains(item.Id));
          }

          // Calling ToList() will finally actually execute the query,
          // either with or without the filter
          return list.ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...