2010-05-29 2 views
1

Я фактически использую объединение в linqtosql (через dblinq).Совместное использование в linq с регулярным выражением

Я пытаюсь включить регулярное выражение в часть соединения запроса linq.

from i in collectiona 
join j in collectionb on Regex.IsMatch(i.name, j.jokered_name) equals true 
(...) 

Я согласен я могу нажать чек RegExp в котором часть запроса Linq, но мне было интересно, если это возможно в рамках присоединиться? Вышеупомянутый код требует структуры кода «i равно j».

Одна вещь, которую я считаю выполненной, переопределяет Equals(), которая содержит материал RegEx.IsMatch() и помещает простой i равно j в часть соединения.

Любые предложения по моей проблеме?

ответ

5

Это нецелесообразно в условии соединения, поскольку соединения в LINQ равны equijoins - они проверяют, соответствует ли какой-либо проектор из одной последовательности прогнозируемому значению в другой последовательности. Это не то, что вы пытаетесь сделать здесь - вы просто проверяете состояние , которое зависит от обоих значений вместе.

где положение является более подходящим здесь:

from i in collectiona 
from j in collectionb 
where Regex.IsMatch(i.name, j.jokered_name) 
select ... 

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

+1

Вы можете использовать пользовательскую функцию, чтобы сделать это через модель L2S ... но вы правы, что нет никакой нативной поддержки для чего-либо подобного. –

+0

Спасибо. Я действительно успешно использую условие where, но я пытался выкопать соединение и особенно ключевое слово equals. Ты отвечаешь на меня оглушительно. – Graveen

1
from i in collectiona 
join j in collectionb 
on x equals y 

Этот код преобразуется в вызов к Enumerable.Join:

collectiona.Join(
    collectionb, 
    i => x, 
    j => y, 
    (i, j) => new {i, j} 
) 

Отсюда легко видеть, что i находится в области видимости для выражения х, в то время как j нет.


from i in collectiona 
from j in collectionb 
where z 

эквивалентно:

collectiona 
    .SelectMany(i => collectionb, (i, j) => new {i, j}) 
    .Where(q => z) 

Каждый q имеет i и А j доступны для использования в выражении г.

Смежные вопросы