Linq to SQL против Access SQL - Почему Take () и TOP не совпадают? - PullRequest
1 голос
/ 21 октября 2010

Извините, я не смог придумать лучшего названия, но для начала это довольно запутанный вопрос.

Я в процессе преобразования базы данных доступа в Интернет и использую linq для sql.

В базе данных доступа есть функция SQL, которая возвращает 3 верхние записи, упорядоченные по убыванию # числа собранных людей.Например, в наборе данных, который имеет следующее число лиц, собранных как 37,10,9,9,9,5,4,1,1, запрос (с помощью TOP 3) возвращает 37, 10, 9, 9,9

В настоящее время это желаемый эффект, поскольку для этого конкретного результата не требуется DISTINCT.

Однако в linq-to-sql с использованием Take (3) возвращаемый результат равен 37,10,9 --- беру 3 записи.никаких сюрпризов.

Мой вопрос - как бы я получил, чтобы linq возвращал тот же результат, что и исходный SQL для доступа?Я знаю, что могу сделать это, просматривая код и проверяя каждую запись, пока я не получу 3 разных, но это кажется немного глупым.

1 Ответ

1 голос
/ 21 октября 2010
var topThree = collection.OrderByDescending(c => c).Distinct().Take(3);
var top = collection.Where(topThree.Contains).OrderByDescending(c => c);

Это должно делать то, что вы хотите. Вы можете легко обернуть его в метод расширения.

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