Альтернативой методу CompareTo()
(экземпляр) будет использование метода Compare()
(статический), который также позволяет указывать логический аргумент для указания сравнение без учета регистра , если хотите.
Этот метод выполняет буквенное сравнение между двумя строками и возвращает -1
, если первая строка меньше вторая строка, 0
, если они равны , и 1
, если первая строка больше второй строки.
Вот пример вашегокод, который делает сравнение без учета регистра, чтобы определить, находится ли фамилия в пределах диапазона (обратите внимание, вы также можете заменить Where
на Count
):
var personCount = from r in range
select new
{
r.ID,
NumberOfPersonsInRange = person.Count(p =>
string.Compare(p.Surname, r.StartRange, true) > -1 &&
string.Compare(p.Surname, r.EndRange, true) < 1)
};
Для получения дополнительной информации о сравнении строк, проверьтеИз этой статьи: Как сравнивать строки в C # .
Другой подход заключается в реализации метода расширения для класса string
, который содержит этофункциональность, например:
public static class Extensions
{
public static bool IsInRange(this string value, string start, string end,
bool ignoreCase = false)
{
return string.Compare(value, start, ignoreCase) > -1 &&
string.Compare(value, end, ignoreCase) < 1;
}
}
Это поможет сократить объем кода, который вам нужно написать в вашем выражении Linq:
var personCount = from r in range
select new
{
r.ID,
NumberOfPersonsInRange = person.Count(p =>
p.Surname.IsInRange(r.StartRange, r.EndRange, true))
};