Usha Sanjee Ответов: 4

оператор like в linq c# для целочисленного поля


мне нужен оператор like для поля interger,тогда я использую этот код

ВАР подробности = дБ.RecipientDescriptions.Где(o =>o.ID.ToString().Contains("67")).Список();

но я получаю ошибку

LINQ to Entities не распознает систему метода.Метод String ToString ()', и этот метод не может быть переведен в выражение хранилища.

какие-нибудь решения, пожалуйста?

[no name]

"любые решения, пожалуйста", конечно.... не вызывайте ToString на строку. Это уже строка, поэтому нет необходимости преобразовывать ее в строку.

Usha Sanjee

ID-это целочисленное поле

4 Ответов

Рейтинг:
2

Fredrik Bornander

Поскольку выражение past to a LINQ to Entities query выполняется в БД, вы ограничили то, что можете передать. С ToString это просто метод, который может сделать все, что угодно, но БД никак не может гарантировать результат.

Что вы можете сделать, если ваш нефильтрованный результирующий набор не слишком велик, так это применить Where предложение после выполнения выражения;

db.RecipientDescriptions.ToList().Where(o =>o.ID.ToString().Contains("67").ToList();


На более общей ноте я бы сказал, что если у вас есть необходимость сделать содержит для значения, то это значение не должно быть типа integer.

Надеюсь, это поможет,
Фредрик


Рейтинг:
2

Suvabrata Roy

Привет,

На самом деле вы используете LINQ to Sql, поэтому эти объекты IQueryable, поэтому нет метода ToString ().

вы можете попробовать это :

ВАР подробности = дБ.RecipientDescriptions.Где(o =>SqlMethods.Например(o.ID, "67%")).Список();


Рейтинг:
2

Member 14868286

Вы можете использовать Contains в Linq для Like.
Если это целочисленное значение, то вам нужно использовать

AsEnumerable()
и
"~~"

string strInvoiceNum = "~~800~~8999~~9000-~~9010~~";

var vdbInvoiceExist = (from row in Db.InvcHead.AsEnumerable()
                        where row.Company == callContextClient.CurrentCompany
                        && strInvoiceNum.Contains("~~" + row.InvoiceNum + "~~")
                        select row);


If it's an string

string strCustID = "~~Addis~~BARRISTON~~CLARKEo~~ECD-~~";
vdbCustomerExist = (from row in Db.Customer
            where row.Company == callContextClient.CurrentCompany && strCustID.Contains("~~" + row.CustID + "~~")
            select row);


Maciej Los

Ошибаешься! Пожалуйста, прочтите решение № 3.

Рейтинг:
1

Stephen Hewison

Скопировано с:

LINQ to Entities не распознает систему метода.Метод String ToString()' [^]

использование может использовать что-то вроде этого,

where userIds.Contains(SqlFunctions.StringConvert((double)user.Id))
instead of where userIds.Contains(user.Id.ToString())