Объедините запросы "ГДЕ" с LINQ - PullRequest
0 голосов
/ 13 февраля 2019

В обычном SQL я мог бы написать запрос типа

select * from geocodes where NAME='somename' and STATE='somestate'

Но в LINQ я не могу понять, как это сделать.Я хотел бы написать несколько комбинированных запросов для следующих отдельных запросов, которые я делаю с LINQ:

if (!String.IsNullOrEmpty(searchString))
        {
            switch (searchBy)
            {
                case "Name":
                    geocodes = geocodes.Where(s => s.NAME.Contains(searchString));
                    break;
                case "Site":
                    geocodes = geocodes.Where(s => s.CFN_SITE.Contains(searchString));
                    break;
                case "Address":
                    geocodes = geocodes.Where(s => s.STREET1.Contains(searchString));
                    break;
                case "City":
                    geocodes = geocodes.Where(s => s.CITY.Contains(searchString));
                    break;
                case "State":
                    geocodes = geocodes.Where(s => s.STATE_CODE.Contains(searchString));
                    break;
                case "Acct":
                    geocodes = geocodes.Where(s => s.AccountNumber.Contains(searchString));
                    break;
            }

        }

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Если geocodes является IQueryable<>, то вы можете использовать отложенное выполнение, которое приходит с созданием запрашиваемого объекта.Ваш код может выглядеть примерно так:

if(searchByName) //Some boolean value to indicate you are searching the name
{
    geocodes = geocodes.Where(s => s.NAME.Contains(searchString));
}

if(searchBySite)
{
    geocodes = geocodes.Where(s => s.CFN_SITE.Contains(searchString));
}

if(searchByAddress)
{
    geocodes = geocodes.Where(s => s.STREET1.Contains(searchString));
}

//etc...

Ваш запрос фактически не будет отправлен в базу данных, поскольку вы его просто создаете.Entity Framework создаст необходимый SQL-запрос, только когда вы материализуете данные, перечисляя результаты (вызывая ToList() или просто циклически повторяя их)

0 голосов
/ 13 февраля 2019

Используйте логический оператор И &&:

geoCodes = geoCodes.Where(s => s.Name.Contains(someName) && s.State.Contains(someState));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...