Упрощенный, У меня есть сущность, назовем его "Foo", в моей базе данных несколько раз.Как выполнить запрос, в том числе Где?
Теперь я хочу, чтобы выбрать определенный Foo s на основе их FooCode
(список FooCode
с выбирается пользователем).
Скажем, у меня есть пять Foo s, три из которых имеют FooCode
"20". Я хочу вернуть список Foo s с FooCode
"20"; ожидаемым результатом является список Foo s с размером трех.
Следующая LinQ выражение работает совершенно нормально, хотя он выбирает всеFoo s перед выполнением Where
(пожалуйста, поправьте меня, если я ошибаюсь). Таким образом, с большим количеством Foo s это, вероятно, не самое быстрое решение.
// user defined list of FooCodes - now containing: "20", "20", "20"
List<string> selectedFooCodes = ...
List<Foo> = _transactionalDataAccess
.Query<Foo>(query => query)
.Where(entity => selectedFooCodes.Contains(entity.FooCode)).ToList();
Я полагаю LinQ выражение в следующем подберет быстрее, потому что Where
непосредственно после Query
. В любом случае, он возвращает список Foo s размером пять. Насколько я понимаю, должен выбрать точно такой же, как в приведенном выше запросе.
// user defined list of FooCodes - now containing: "20", "20", "20"
List<string> selectedFooCodes = ...
List<Foo> = _transactionalDataAccess
.Query<Foo>(query => query
.Where(entity => selectedFooCodes.Contains(entity.FooCode)));
Почему это? Может кто-то сказать мне, что мне не хватает. Выше Linq возвращают точно так же, как:
_transactionalDataAccess
.Query<Foo>(query => query);
Почему не Where
никакой разницы? Или есть еще более быстрое обозначение, о котором я не знаю?
Прошу прощения, если это было задано ранее. Я просматривал вопросы LinQ в StackOverflow, но не нашел аналогичного вопроса. Должен признать, что я решил задать свой вопрос, потому что ему нужно меньше времени, чем чтение и понимание всех существующих.
Вы можете разместить более подробную информацию о коде? Что такое _transactionalDataAccess? –
@RicardoSilva Это тип 'ITransactionalDataAccess', который сужается до' IQueryDataAccess'. Прошу прощения, это дело от нашей компании. Он в основном просто представляет интерфейс с базой данных (Oracle). Надеюсь, это поможет. Это даже имеет значение? – Alex
Невозможно ответить на этот вопрос, не зная, что такое объект '_transactionalDataAccess'. – Hogan