2011-08-01 4 views
1

タグを使用して、スタックオーバーフローと同様にコンテンツを分類するシステムがあります。 LINQ to SQLを使用して、最近使用されたタグのリストを生成しようとしています。プライマリキーでLINQからSQLにDistinctを使用

(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.PrimaryKeyではなくTablename。*で比較するため、私はdistinctを使用できません.SQLに変換されないため、IEqualityComparerを実装できません。 .ToList()を持つDBからの何百万ものレコード。では、私はどうしたらいいですか?

答えて

1

このようなオーバーロードされた別個の演算子をサポートする独自のクエリプロバイダを作成できます。それは安くはありませんが、おそらく価値のあるものになります。特にクエリ生成を構成可能にすることができれば価値があります。それは多くのカスタマイズを可能にします。

そうしないと、ストアドプロシージャまたはビューを作成できます。

0

副選択を使用します。

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

これが唯一の明確な記録を意味しますが、フォームのcm.Tagsを返され、唯一の問題は、あなたがresult

を注文するためにいくつかの方法を見つける必要がありますです
関連する問題