Поиск по идентификатору, который содержит дополнительные символы - PullRequest
0 голосов
/ 24 сентября 2018

Есть страница, где сотрудники могут искать после Id и Id выглядит следующим образом 00320, а тип Id является целым числом, а Id в базе данных выглядит так: 320, я просто добавляю два 00 в моем представлении, где я показываю id, а также добавитьдва 00 в моем действии, где я говорю, Id содержит параметр поиска, я также отлажен, и я вижу Id содержит 00320, но когда я ищу после 00320, он не может найти никакого совпадения. Что я сделал не так!я что-то пропустил!
Может кто-нибудь помочь мне или указать мне правильное направление!
Заранее спасибо.

Контроллер:

 public ActionResult Abnesager(string searchingAbensager, int? pageNumber)              
    {
      IPagedList<RMAHistory> query = db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y })
      .Where(x => x.y.Id.ToString().Contains("00"+searchingAbensager) || x.y.Id.Name.Contains(searchingAbensager) || 
      searchingAbensager == null).Select(t => new RMAHistory
        {

         //Select Something

        }).ToPagedList(pageNumber ?? 1, 10);

            return View(query);
    }

Вид:

@model IPagedList<NameSpace.Models.RMAHistory>
@using PagedList;
@using PagedList.Mvc;

    using (Html.BeginForm("Abnesager", "User", FormMethod.Get))
    {

        @Html.TextBox("searchingAbensager", null, new { @placeholder = "ID,Name" })

        <button type="submit">Search</button>

    }

    @Html.PagedListPager(Model, pageNumber => Url.Action("Abensager", new
                            {
                                pageNumber,

                                searching = Request.QueryString["searchingAbensager"]

                            }))

 foreach (var rma in Model)
    {

    <tr>
         <td><span>00</span>@rma.Id</td>
    </tr>

    }

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Исходя из ваших комментариев, Id является целым числом, и ваши входные данные могут быть преобразованы в целое число и сравнены на равенство.Тогда в представлении вам нужно только добавить «00» для отображения.Взгляд не изменится, но действие изменится.Исправляя ошибку x.y.Id.Name = = x.y.Name и обрабатывая x.y.Id как целое число, действие становится ...

public ActionResultAbensager(string searchingAbensager, int? pageNumber)
{
    var query = db.RMAStatus.Join(
        db.RMA_History, 
        u => u.ID, y => y.StatusID, 
        (u, y) => new { u, y });

    if (searchingAbensager != null)
    {
        int abensager;

        if (int.TryParse(searchingAbensanger, out abensager))
        {
            query = query.Where(x => 
                x.y.Id == abensager || 
                x.y.Name.Contains(searchingAbensager));
        }
        else
        {
            query = query.Where(x =>
                x.y.Name.Contains(searchingAbensanger));
        }
    }

    return View(query
        .Select(t => new RMAHistory { ... })
        .ToPagedList(pageNumber ?? 1, 10);
}

Используя построитель предикатов , оно может небудь таким многословным ...

public ActionResult Abensager(string searchingAbensager, int? pageNumber)
{
    var predicate = PredicateBuilder.False<RMAHistory>();

    if (searchingAbensager != null)
    {
        int abensager;

        if (int.TryParse(searchingAbensanger, out abensager))
        {
            predicate = predicate.Or(p => p.Id = abensanger);
        }

        predicate = predicate.Or(p => p.Name.Contains(searchingAbensanger));
    }

    return db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y })
        //.AsExpandable() // If using Entity Framework
        .Where(predicate);
}

возможно ...

private static PredicateBuilder.False<RMAHistory> AbensagerPredicate(string searchingAbensager)
{
    var predicate = PredicateBuilder.False<RMAHistory>();

    if (searchingAbensager == null) { return predicate; }

    int abensager;

    if (int.TryParse(searchingAbensanger, out abensager))
    {
        predicate = predicate.Or(p => p.Id = abensanger);
    }

    predicate = predicate.Or(p => p.Name.Contains(searchingAbensanger));

    return predicate;
}

public ActionResult Abensager(string searchingAbensager, int? pageNumber)
{
    return db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y })
        //.AsExpandable() // If using Entity Framework
        .Where(AbensagerPredicate(searchingAbensager));
}
0 голосов
/ 25 сентября 2018

Вы можете просто выбрать подстроку из поискового значения и просто искать ее, не добавляя 0s

public ActionResult Abnesager(string searchingAbensager, int? pageNumber)              
{
    IPagedList<RMAHistory> query = db.RMAStatus.Join(db.RMA_History, u => u.ID, y => y.StatusID, (u, y) => new { u, y })
                                               .Where(x => x.y.Id.ToString().Contains(searchingAbensager.Substring(2)) || x.y.Name.Contains(searchingAbensager) || searchingAbensager == null)
                                               .Select(t => new RMAHistory
                                               {
                                                   //Select Something
                                               }).ToPagedList(pageNumber ?? 1, 10);

    return View(query);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...