Расширенный поиск в Linq to SQL возможен? - PullRequest
2 голосов
/ 16 марта 2009

Без использования «LIKE» в Dynamic Linq это практически делает его бесполезным для меня при попытке создать расширенный поисковый запрос.

Как кто-нибудь из вас преодолел проблему расширенного поиска при использовании Linq to SQL?

Мне нужно поискать следующие типы полей, и все они также могут быть нулевыми:

  • Элемент списка
  • varchar (столбец LIKE '%' + myText + '%')
  • текст (столбец LIKE '%' + myText + '%')
  • DateTime (столбец> = myDate - если «myDate», конечно, не равно нулю)
  • целое число (column = myInt - если "myInt", конечно, не равно нулю)
  • булево

Я также не могу просто использовать ExecuteQuery, потому что тогда я не получу истинную «сущность» и все ее отношения / ассоциации.

Я просто не понимаю, как я могу сделать это с Linq to SQL. В настоящее время у меня нет сохраненных процедур, поэтому я бы предпочел не иметь один сохраненный процесс только для этого, если бы я мог выяснить это с помощью Linq.

1 Ответ

2 голосов
/ 16 марта 2009

Чтобы сделать LIKE-операторы, вы можете использовать метод Contains :

string myText = "test";
var query = dc.Table.Where(r=>r.Column.Contains(myText));

Это создаст такой SQL-оператор:

SELECT [t0].[Column], ... [t0].[ColumnN]
FROM [Table] AS [t0]
WHERE [t0].[Column] LIKE @p0

И параметр @ p0 будет иметь "%test%" в качестве значения.

Для сравнения Date и int, если я правильно понимаю, что вы хотите, вы можете сделать это:

DateTime? myDate = new DateTime(2009, 3, 15);
var query = dc.Table.Where(r=> r.DateColumn > myDate || myDate == null );

Таким образом, если myDate имеет значение null, условие DateColumn > myDate не будет оцениваться.

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