Использование Distinct в LINQ to SQL на первичном ключе - PullRequest
1 голос
/ 01 августа 2011

У меня есть система, которая использует теги для категоризации контента, аналогично способу переполнения стека.Я пытаюсь сгенерировать список самых последних использованных тегов, используя LINQ to SQL.

(from x in cm.ContentTags
    join t in cm.Tags on x.TagID equals t.TagID
    orderby x.ContentItem.Date descending select t)
    .Distinct(p => p.TagID) // <-- Ideally I'd be able to do this

Таблица тегов имеет отношение многие ко многим с таблицей ContentItems.ContentTags объединяет их, каждый кортеж имеет ссылку на Tag и ContentItem.

Я не могу просто использовать отдельный, потому что он сравнивается по Tablename. *, А не Tablename.PrimaryKey, и я не могу реализовать IEqualityComparer, так какэто не переводит на SQL, и я не хочу получать потенциальные миллионы записей из БД с помощью .ToList ().Итак, что мне делать?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы можете написать свой собственный поставщик запросов, который поддерживает такой перегруженный отдельный оператор.Это недешево, но, вероятно, это того стоило бы, особенно если бы вы могли сделать его генерацию запросов компонуемой.Это позволило бы выполнить множество настроек.

В противном случае вы можете создать сохраненный процесс или представление.

0 голосов
/ 01 августа 2011

Используйте подвыбор:

var result = from t in cm.Tags
             where(
                   from x in cm.ContentTags
                   where x.TagID == t.TagID
                  ).Contains(t.TagID)
             select t;

Это будет означать, что из см будут возвращаться только отдельные записи. Теги, единственная проблема в том, что вам нужно будет найти способ заказа result

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