Linq to SQL - Запрос - PullRequest
       3

Linq to SQL - Запрос

1 голос
/ 14 марта 2012

Я пытаюсь имитировать приведенный ниже оператор в Linq to SQL.

WHERE (rtrim(posid) like '%101' or rtrim(posid) like '%532')

I оператор в основном определяет, заканчивается ли posid на 101 или 532. В приведенном выше примере я только делаю2 сравнения, но их может быть от 1 до N сравнений, все соединены с ИЛИ.Я сохраняю значения сравнения (101 532, ...) в общем списке, который я отправляю в мой метод Linq to SQL.

Я попытался имитировать приведенный выше SQL с помощью предложения where безуспешно (пример ниже):

var PosNum = new List<string>();
PosNum.Add("101");
PosNum.Add("532");
var q = (from a in context.tbl_sspos select a);
q = q.Where(p => PosNum.Contains(p.posid.Trim()));

Проблема с приведенным выше предложением where заключается в том, что он пытается выполнить точное совпадение, а я хочу, чтобы заканчивался сравнением .

Как бы я имитировал SQLоператор в Linq для SQL.Заранее благодарим Вас за любую помощь / совет, который вы можете предоставить.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Я бы использовал String.EndsWith ();

Это будет проверять конец строки, а не все ее содержимое.

var q = (from a in context.tbl_sspos select a);
q = q.Where(p => p.posid.EndsWith("102") || p.posid.EndsWith("532")); 
0 голосов
/ 14 марта 2012

В EF 4 вы можете использовать методы StartsWith / EndsWith.Может также работать в LINQ to SQL.

ОБНОВЛЕНИЕ
Просто понял, что вы пытаетесь сделать это с несколькими значениями (PosNum), я не думаю, что это напрямуюподдерживается в настоящее время.Тем не менее, вы можете объединить несколько предложений Where(), чтобы получить результат.

ОБНОВЛЕНИЕ 2
Как указал AdamKing, объединение предложений where фильтруется по всем значениям PosNum, здесьисправленная версия:

var baseQuery = (from a in context.tbl_sspos select a);    
IEnumerable<YourType> q = null;

foreach(var pos in PosNum)
{
    if(q == null)
        q = baseQuery.Where(a => a.posid.EndsWith(pos));
    else
        q = q.Union(baseQuery.Where(a => a.posid.EndsWith(pos)));
}

Это уже не так красиво, но, тем не менее, работает.

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