Проблема оператора Linq-to-SQL - PullRequest
0 голосов
/ 19 апреля 2010

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

Пока мой код:

Void SearchFunction()
{
  TiamoDataContext context = new TiamoDataContext();

  var search from p in context.UserProfiles
      where p.DanceType == UserSearchString
      select p;

  UserSearchGrid.DataSource = search;
  UserSearchGrid.DataBind();
}

Я попробовал p.equals, но я почти уверен, что это не тот способ.

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Похоже, синтаксис вашего запроса немного не в порядке. Это должно выглядеть так:

var search = from p in context.UserProfiles
             where p.DanceType == UserSearchString
             select p;

Так как вы пытаетесь запросить несколько столбцов, вам нужно будет связать имена столбцов, которые вы просматриваете, с or s:

var search = from p in context.UserProfiles
             where p.DanceType == UserSearchString ||
                 p.Name == UserSearchString ||
                 p.SomeOtherStringColumn == UserSearchString
             select p;

Или, если вы хотите использовать лямбда-синтаксис:

var search = context.UserProfiles.Where(p => p.DanceType == UserSearchString ||
                 p.Name == UserSearchString ||
                 p.SomeOtherStringColumn == UserSearchString);

Имейте в виду, что использование любого из этих методов подразумевает, что p.DanceType имеет тип string.

1 голос
/ 19 апреля 2010

Если вы хотите, чтобы он осуществлял поиск по каждому столбцу в таблице, вы должны указать ему выполнить поиск по каждому столбцу в таблице.

var search =
    from p in context.UserProfiles
    where 
        p.DanceType == UserSearchString ||
        p.Foo == UserSearchString ||
        p.Bar == UserSearchString
    select p;

Это все, что нужно сделать. Нет магического оператора, который будет делать это автоматически (не может быть - некоторые столбцы могут даже не быть строками).

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

Кроме того, этот "поиск" только проверяет чистое равенство. Возможно, вы захотите использовать StartsWith или Contains для поиска префикса или подстроки, соответственно.

...