Как использовать Нулевой или пустой в сыром sql для присвоенного значения, которого нет в таблице?

Как проверить IsNullOrEmpty в RawSQL Если контрольный номер и идентификатор отправителя оба имеют значения, то проверьте одинаковое условие для обоих. Если он имеет только один идентификатор отправителя, проверьте условие одинакового только для идентификатора отправителя, и если он имеет только контрольный номер, проверьте условие только для одного контрольного номера. Это показывает ошибку как

Неверный синтаксис рядом с *

using (var context = new BSoftWEDIIContext())
                {

                    if (!string.IsNullOrEmpty(controlNumber))
                    {
                        controlNumber = "*" + controlNumber + "*";
                    }
                    if (!string.IsNullOrEmpty(senderNumber))
                    {
                        senderNumber = "*" + senderNumber + "*";
                    }

                    var fileDetail = context.FileDetails
                        .SqlQuery("select * from FileDetails where @" + controlNumber.ToString()
                        +" is not null OR CONVERT(varchar(max), RawData) like '%" + controlNumber.ToString() 
                        + "%' AND CONVERT(varchar(max), RawData) like '%" + senderNumber.ToString()+"%'").ToList();
                    matchedFileId = fileDetail?.Select(a => a.Id).ToList();

                }

1 ответ

Решение

Вы добавляете слишком много * и результирующий запрос строится неправильно. Проверьте состояние соответственно:

using (var context = new BSoftWEDIIContext())
            {

                if (!string.IsNullOrEmpty(controlNumber))
                {
                    controlNumber = controlNumber;
                }
                if (!string.IsNullOrEmpty(senderNumber))
                {
                    senderNumber = senderNumber;
                }

                var fileDetail = context.FileDetails.SqlQuery("select * from FileDetails where " + controlNumber.ToString() + " is not null" + " OR CONVERT(varchar(max), RawData) like '%" + controlNumber.ToString() + "%' AND CONVERT(varchar(max), RawData) like '%" + senderNumber.ToString() + "%'").ToList();
                matchedFileId = fileDetail?.Select(a => a.Id).ToList();
            }

Примечание. Этот подход склонен к внедрению SQL и не рекомендуется вообще. Пожалуйста, ознакомьтесь с параметризованным запросом и рекомендациями по ссылкам ниже:

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/how-to-execute-a-parameterized-entity-sql-query-using-entitycommand

как изменить SQL-оператор для параметризованного запроса?

Другие вопросы по тегам