linq SingleorDefault - PullRequest
       0

linq SingleorDefault

2 голосов
/ 25 октября 2010

Я хочу вернуть одну строку из таблицы пользователей, используя идентификатор учетной записи домена в качестве основного и уникального ключа

Однако, когда я использую singleordefault и вижу его перевод SQL, он выполняет полный выбор * из пользователей

мой запрос ..

var user = base.SingleorDefault(t=>t.domainaccountid)

Я хочу, чтобы это вернуло только одну строку!

Ответы [ 4 ]

4 голосов
/ 25 октября 2010

Что такое base?Возможно ли, что вы в какой-то момент принудили его к IEnumerable<T>, а не IQueryable<T>? что вызвало бы это.Обратите внимание, что состав базы данных возможен только при использовании IQueryable<T>, поэтому, если какой-либо из ваших методов вернул что-то другое , кроме этого, состав закончится.

1 голос
/ 25 октября 2010

Вы можете попробовать Where вместе с FirstOrDefault:

var user = base.Where(t => t.domainaccountid == 123).FirstOrDefault();
0 голосов
/ 11 марта 2014

SingleOrDefault ищет уникальные записи, он должен делать:

SELECT TOP 2 * FROM TABLE

Он делает это так, что если он найдет 2 результата, он выдаст исключение, поскольку он не является уникальным.

Если вас не волнует нахождение его как уникального объекта, так как у вас есть другие меры для предотвращения дублирования; или просто все равно, вы можете использовать FirstOrDefault следующим образом:

array.FirstOrDefault(x => x.id == someOtherId);

Это выполнит следующее:

SELECT TOP 1 * FROM TABLE

Это ускорит ваши результаты, особенно в больших таблицах, потому что он вернется, как только будет найден первый результат.

0 голосов
/ 10 апреля 2012

Попробуйте

var user = base.SingleorDefault(t=>t.domainaccountid==123);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...