c # .net 4.0: параметр входной строки, который можно обнулять, и лямбда-выражения - PullRequest
0 голосов
/ 07 июля 2010

У меня есть следующий метод:

public IQueryable<Profile> FindAllProfiles(string CountryFrom, string CountryLoc)
{


    return db.Profiles.Where(p => p.CountryFrom.CountryName.Equals(CountryFrom,StringComparison.OrdinalIgnoreCase));

}

Сейчас он просто фильтрует по CountryFrom, но мне нужно отфильтровать и по CountryLoc.Итак, как мне изменить фильтр Где?

Кроме того, CountryFrom может быть нулевым или CountryLoc может быть нулевым.Итак, как мне изменить сигнатуру метода для всех параметров входной строки, которые могут иметь значение NULL?

Я знаю, как это сделать в SQL, но я не уверен насчет лямбда-выражений или LINQ.

Спасибо

Ответы [ 3 ]

2 голосов
/ 07 июля 2010

Ваш вопрос на самом деле не относится к LINQ.Внутри лямбды-выражения вы можете поместить любые логические условия, например:

p => p.CountryFrom.CountryName.Equals(...) && p.CountryLoc.CountryName.Equals(...)

. Для обработки нулевых значений вы можете использовать вместо этого статический метод string.Equals, например:

p => string.Equals(p.CountryFrom.CountryName, CountryName, StringComparison.OrdinalIgnoreCase)

Если это становится слишком длинным, вы всегда можете извлечь его в метод.

0 голосов
/ 07 июля 2010

Вы хотите использовать логический оператор и оператор & & в вашем лямбда-выражении для фильтрации по CountryFrom и CountryLoc. Ex

db.Profiles.Where(p => p.CountryFrom == CountryFrom && p.CountryLoc == CountryLoc);

В C # строки являются ссылочными типами и поэтому могут иметь значение null. Вы можете проверить нулевые значения, используя

myString == null
0 голосов
/ 07 июля 2010
return db.Profiles
    .Where(p => p.CountryFrom.CountryName.Equals(CountryFrom, 
        StringComparison.Ordinal.IgnoreCase) && 
        p.CountryLoc.CountryName.Equals(CountryLoc,
        StringComparison.Ordinal.IgnoreCase));

Извините ... не было никакого способа сделать это утверждение симпатичным.

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

Кроме того, строковый параметр может быть нулевым, независимо от того, какой (это ссылочный тип), поэтому вам не нужно беспокоиться о том, чтобы все обнулялось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...