поиск int id, начиная с x Entity Framework 4.1 - PullRequest
0 голосов
/ 25 августа 2011

В настоящее время у меня есть модель Entity Framework, которая собирает данные из устаревшей базы данных, и в настоящее время я использую int в моих Id свойствах

Я пытаюсь создать окно поиска с возможностями автозаполнения и хочу, чтобы функция автозаполнения возвращала подмножество записей в зависимости от того, содержит или нет образец id (окончательное решение по проекту еще не принято), и я у меня проблемы с преобразованием целого числа id в строку, как обычно я использую recs.Id.toString().StartsWith(recordId), но это, очевидно, не поддерживается Entity Framework

Есть ли способ обойти это ограничение?

Мой код выглядит следующим образом

Модель:

public class Sample
{
  public Sample()
  {
      Tests = new List<Test>();
  }

public          int                     Id              { get; set; }
public          DateTime                SampleDate      { get; set; }
public          string                  Container       { get; set; }
public          string                  Product         { get; set; }
public          string                  Name            { get; set; }
public          string                  Status          { get; set; }

public virtual SamplePoint SamplingPoint { get; set; }
public virtual SampleTemplate SampleTemplate { get; set; }
public Customer ForCustomer { get; set; }
public virtual ICollection<Test> Tests { get; set; }
}

и запрос, который я сейчас пытаюсь применить к этой модели

[HttpGet]
public JsonResult AutoComplete(string partialId)
{
    var filteredSamples = 
                repo.AllSamples.Where( s =>                                   
                                String.Compare(s.Status, "A", false) == 0
                                && (s.Id.ToString()).StartsWith(partialId)
                        ).ToList();

    return Json(filteredSamples, JsonRequestBehavior.AllowGet);
}

Любые идеи были бы замечательными. На данный момент у меня нет идей

Ответы [ 3 ]

1 голос
/ 12 сентября 2011

В итоге я добавил представление для автозаполнения данных и преобразовал данные в строку в операторе выбора, и это решило мою проблему

1 голос
/ 25 августа 2011

Независимо от того, что вы делаете, это приведет к ужасной производительности на больших наборах данных, потому что вы не сможете использовать какие-либо индексы. Я бы рекомендовал использовать триггер или запланированное задание, чтобы сохранить начальную цифру в отдельном поле и отфильтровать ее.

0 голосов
/ 26 августа 2011

Дикая мысль: как насчет создания вычисляемого постоянного столбца в таблице базы данных, который преобразует ваш ID (INT) в строку?

Тогда вы могли бы:

  • поместить индекс в этот столбец
  • использовать простое сравнение строк в этом столбце

По сути, вам нужно это:

ALTER TABLE dbo.YourTable
  ADD IDAsText AS CAST(ID AS VARCHAR(10)) PERSISTED

Теперь обновите вашу модель EF - и теперь у вас должно быть новое string поле IDAsText в вашем классе объектов. Попробуйте выполнить сравнение автозаполнения с этим строковым полем.

...