КАК с Linq to Entities

Я знаю, что метод .Contains() похож на LIKE %therm%, метод .StartsWith() похож на LIKE therm%, а метод .EndsWith() похож на LIKE %therm, но ...

Есть ли способ сделать что-то подобное на **Linq to Entities**?

SELECT * FROM [dbo].[Users] WHERE Name LIKE 'rodrigo%otavio%diniz%waltenberg'

PS: Я ИСПОЛЬЗУЮ LINQ TO ENTITIES. НЕ LINQ TO SQL


person Rodrigo Waltenberg    schedule 20.10.2010    source источник
comment
Возможный дубликат Как использовать SQL LIKE с LINQ to Entities ?   -  person Michael Freidgeim    schedule 17.03.2017


Ответы (3)


Да, вы можете сделать это с помощью синтаксиса ESQL / Query Builder:

var matching = Context.Users.Where("it.Name LIKE 'rodrigo%otavio%diniz%waltenberg'");
person Craig Stuntz    schedule 21.10.2010

Это должно помочь.

from u in context.users
    where System.Data.Linq.SqlClient.SqlMethods.Like(
        u.Name, 
        "rodrigo%otavio%diniz%waltenberg")
    select u

Изменить:
Оказывается, это работает только с LINQ2SQL, но не с LINQ2Entities. Linq SqlMethods.Like fails предполагает, что вы можете использовать Where непосредственно в таблице.

person Albin Sunnanbo    schedule 20.10.2010
comment
Исключение: LINQ to Entities не распознает метод метода Boolean Like (System.String, System.String), и этот метод нельзя преобразовать в выражение хранилища. - person Rodrigo Waltenberg; 21.10.2010
comment
@Rodrigo: Хммм, l2e работает близко к l2s, чтобы сбить с толку ... Я обновил свой ответ с помощью linq на другой вопрос, который может быть полезен. - person Albin Sunnanbo; 21.10.2010

Как насчет использования регулярных выражений в операторе LINQ? Примерно так:

        RegularExpressions.Regex p 
             = new RegularExpressions.Regex("rodrigo%otavio%diniz%waltenberg");

        using (DataContext.MyDataContext context = new MyDataContext())
        {
            var result = from u in context.users
                      where p.IsMatch(u.name)
                      select u;
        }
person Terry C    schedule 21.10.2010
comment
Исключение: LINQ to Entities не распознает метод Boolean IsMatch (System.String) метода, и этот метод нельзя преобразовать в выражение хранилища. - person Rodrigo Waltenberg; 22.10.2010