Я теряю его ... = \C# String.Compare в FirstOrDefault от структуры объекта
Использование .NET Framework 4 Использование рамки сущности получить к MS SQL DB
(JFYI - Вот некоторые уродливые ищет код, как это для местного обслуживания и никогда не будет работать с таблицами размером более ~ 1000 строк. - набор инструментов выбрал более или менее приемлемо)
Запуск следующего кода
var itemOfInterest = entity.tbl_Items
.FirstOrDefault(item =>
string.Compare(item.Name, SomeLocalItem.Name, true) == 0
&& (string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
);
.
и возвращает меня в первый (или нулевой) элемент, найденный только в
(string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
причины
При запуске
var serviceOfInterest = entity.tbl_Service
.Where(item => string.Compare(item.Name, SomeLocalItem.Name, true) == 0)
.FirstOrDefault(item =>
(string.Compare(item.tbl_Server.FQDN, SomeLocalItem.ServerFQDN, true) == 0)
|| (string.Compare(item.Server.FQDN, WithoutDomainLocalFQDN, true) == 0)
);
Я получаю правильный результат.
Не чувствую себя хорошо. Может быть, проблема здесь очень проста, но я не могу просто ее увидеть. Строки, сравниваемые в позиции «Имена», выглядят примерно так:
«Удивительный предмет - ручка».
«Мой Удивительный Предмет - Гран-па пистолет»
«Мой Удивительный Предмет - что-то в моем кармане - для вас»
Любая помощь приветствуется. Я даже в порядке, назвав имена для такого вопроса, но мне действительно нужен ответ.
Большое спасибо заранее.
Вы используете string.Compare == 0 для проверки равенства? Я считаю, что сравнение строк с оператором == лучше понимается в Entity Framework, поскольку позволяет платформе строить запросы, анализируя объект дерева выражений, созданный из лямбда. Приоритет оператора также может быть проблемой. Если первый запрос оценивается как (a && b) || c он не будет возвращать те же результаты, что и последний запрос, который эффективно является && (b || c). –