2011-08-01 27 views
1

我有一個系統使用標籤來對內容進行分類,類似於Stack Overflow的方式。我正在嘗試使用LINQ to SQL生成最近使用的標記列表。在主鍵上使用不同的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 

Tags表與ContentItems表具有多對多的關係。 ContentTags加入它們,每個元組都有一個對Tag和ContentItem的引用。

我不能僅僅使用distinct,因爲它比較Tablename. *而不是Tablename.PrimaryKey,而且我不能實現一個IEqualityComparer,因爲它不會轉換爲SQL,而且我也不想將潛能使用.ToList()從數據庫中記錄數百萬條記錄。所以我該怎麼做?

回答

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