Linq to Entities LIKE '[A-G]%' запрос - PullRequest
0 голосов
/ 27 декабря 2011

Я пытаюсь воссоздать некоторые запросы SQL, которые у меня есть, в операторы L2E. Один из запросов:

SELECT TOP 25 itms.[StringValue]
      ,itms.[Name]
      ,itms.[Picture]
  FROM [DB].[dbo].[Items] AS itms
  WHERE itms.StringValue LIKE '[A-G]%'

Мне дано начало char (в данном случае A) и окончание char (G), и мне нужно вытащить все предметы, у которых StringValue начинается с char между началом и окончанием.

Моя первая попытка состояла в том, чтобы посмотреть, выдаст ли мне L2E этот запрос:

items = from i in items
        where i.StringValue.StartsWith("[" + refinement.Value + "]")
        select i;

Я подумал, что это не сработает, но попробовать стоило.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Пара опций, которые должны работать:

1) если вы знаете, что фильтр основан только на первом символе, то вы можете сделать что-то вроде:

var startChar = 'A';
var endChar = 'G';

// other options, but you get the point
var validStartChars = Enumerable.Range(0, 26)
    .Select(i => (char)('A' + i))
    .Where(c => c >= startChar && c <= endChar)
    .ToArray();

var matches = items.Where(i => validStartChars.Contains(i.StringValue[0]));

аналогично, вы можете получить первый символ и просто выполнить большую / меньшую проверку в предложении Where (если это всегда такой диапазон)

2) если вы хотите, вы все равно можете использовать sql для запросов с L2E, просто используйте ExecuteStoreQuery и позвольте ему вернуть вам объекты обратно:

http://msdn.microsoft.com/en-us/library/dd487208.aspx

Если вы хотите, чтобы возвращаемые сущности отслеживались, обязательно вызовите перегрузку, которая позволяет указать имя набора сущностей:

http://msdn.microsoft.com/en-us/library/dd487226.aspx

0 голосов
/ 27 декабря 2011

Это должно было сработать, поэтому я не совсем уверен, почему это не сработало.Стоит проверить это уточнение. Значение приходит откуда-то разумное, а не напрямую из другого запроса LINQ to SQL.

В дополнение к этому, хотя есть класс SQLMethods , который предлагает множество различных возможностейкоторый будет доступен в SQL при записи запросов LINQ to SQL (обратите внимание, что он не будет работать с LINQ для объектов Queries).Поэтому вы могли бы использовать метод Like SQLMethods и присвоить ему исходный оператор LIKE.

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