Поиск LINQ только с учетом эквивалентности - PullRequest
0 голосов
/ 29 апреля 2010

Я пытаюсь отфильтровать набор записей на основе критериев подобъекта. Это компилируется нормально

recordList = recordList.Where(r => r.Areas.Where(a => a.Area == "Z").Count() > 0);

но это не

recordList = recordList.Where(r => r.Areas.Where(a => a.Area <= "Z").Count() > 0);

дает эти ошибки Невозможно преобразовать лямбда-выражение в тип 'string', поскольку оно не является делегатом Делегат System.Func не принимает аргументы «1» Оператор «<=» нельзя применить к операндам типа «строка» и «строка» </p>

! = Работает нормально, любой вид операции меньше или больше, чем операция.

Ответы [ 3 ]

2 голосов
/ 29 апреля 2010

Это не имеет ничего общего с LINQ, не позволяющим использовать <=, но строки нельзя сравнивать с этим оператором (но, очевидно, можно использовать равные или не равные). </p>

Запись в консольном приложении:

string strA = "jamie";
string strB = "Z";
Console.WriteLine(strA != strB);
Console.WriteLine((bool)(strA <= strB));

Подчеркивает последнюю строку с (в основном) той же ошибкой

Невозможно применить оператор '<=' с типом 'строка' и 'строка' </p>

Теперь вы можете использовать оператор <= для <code>char, поэтому подобный код, приведенный ниже, компилируется и работает, как и ожидалось:

char charA = 'J';
char charB = 'Z';
Console.WriteLine(charA<=charB);

Так что, может быть, вы хотите:

recordList = recordList.Where(r => r.Areas.Where(a => a.Area[0] <= 'Z').Count() > 0);

НТН.

1 голос
/ 29 апреля 2010

Вы можете использовать <и> на символах, но не на строках;) Используйте String.Compare или вы можете написать свой собственный компаратор для сравнения 2 строк.

1 голос
/ 29 апреля 2010

Оператор '<=' нельзя применять к операндам типа 'string' и 'string' </p>

Ну, вот и все. Чтобы сравнить для упорядочения, а не для равенства, используйте string.Compare.

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