2013-10-17 20 views
1

我需要在LINQ的一列上使用distinct檢索整個行集合。LINQ中的一列上使用不同的整行LINK

我得到Distinct使用GroupBy但它只選擇一列值,而我需要整行。

**此列表返回ThumbnailAltText列中唯一的集合,但BUT只返回該列而不是整個行值。所以我只好用var代替type

var catlist = _db.ac_Categories 
    .Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null 
     && (!c.ThumbnailAltText.StartsWith("gifts/") 
     && !c.ThumbnailAltText.StartsWith("email/") 
     && !c.ThumbnailAltText.StartsWith("news/") 
     && !c.ThumbnailAltText.StartsWith("promotions/") 
     && !c.ThumbnailAltText.StartsWith("the-knowledge/"))).ToList() 
     .GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList(); 
           .GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList(); 

同樣的事情不會type喜歡這個工作,我收到錯誤。

List<ac_Categories> catlist = _db.ac_Categories 
     .Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null 
      && (!c.ThumbnailAltText.StartsWith("gifts/") 
      && !c.ThumbnailAltText.StartsWith("email/") 
      && !c.ThumbnailAltText.StartsWith("news/") 
      && !c.ThumbnailAltText.StartsWith("promotions/") 
      && !c.ThumbnailAltText.StartsWith("the-knowledge/"))).ToList() 
      .GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList(); 
            .GroupBy(c=> c.ThumbnailAltText.Trim().Distinct()).ToList(); 

錯誤:The 'Distinct' operation cannot be applied to the collection ResultType of the specified argument.

編輯:我需要一個集合,而不是第一個記錄,ID等欄目包含差異值僅ThumbnailAltText我包含重複

+0

你能否提供ac_Categories類型定義 – zabulus

+0

它的一個實體使用數據庫的第一種方法創建...它的一個非常大的表,所以不能在這裏提供... –

回答

3

在一根繩子上的回報Distinct獨特的人物。我假設你想要返回所有的行,但每行應該是唯一的,根據ThumbnailAltText,這是正確的嗎?

那麼這應該工作,它只是返回每個組的第一行:

var catlist = _db.ac_Categories 
    .Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null 
     && (!c.ThumbnailAltText.StartsWith("gifts/") 
     && !c.ThumbnailAltText.StartsWith("email/") 
     && !c.ThumbnailAltText.StartsWith("news/") 
     && !c.ThumbnailAltText.StartsWith("promotions/") 
     && !c.ThumbnailAltText.StartsWith("the-knowledge/"))) 
    .GroupBy(c=> c.ThumbnailAltText.Trim()) 
    .ToList() 
    .Select(g => g.First()) 
    .ToList(); 
+0

這是要返回整行還是隻有一列值? –

+1

@ patel.milanb:它返回整行。 –

+0

讓我試試看,並會讓你知道...所以如果它返回整行我可以使用返回類型爲List 正確?而不是var –

1

你也可以使用Distinct(IEnumerable, IEqualityComparer)擴展這樣

public class CategotiesEqualityComparer : IEqualityComparer<ac_Categories> 
{ 
    public bool Equals(ac_Categories x, ac_Categories y) 
    { 
     return x.ThumbnailAltText.Trim() == y.ThumbnailAltText.Trim(); 
    } 

    public int GetHashCode(ac_Categories obj) 
    { 
     return obj.ThumbnailAltText.Trim().GetHashCode(); 
    } 
} 

List<ac_Categories> catlist = _db.ac_Categories 
    .Where(c => c.VisibilityId == 0 && c.ThumbnailAltText != null 
     && (!c.ThumbnailAltText.StartsWith("gifts/") 
     && !c.ThumbnailAltText.StartsWith("email/") 
     && !c.ThumbnailAltText.StartsWith("news/") 
     && !c.ThumbnailAltText.StartsWith("promotions/") 
     && !c.ThumbnailAltText.StartsWith("the-knowledge/"))) 
    .Distinct(new CategotiesEqualityComparer()) 
    .ToList() 
+0

錯誤:LINQ to Entities無法識別方法'System.Linq.IQueryable'1 [WebMgr.ac_Categories] Distinct [ac_Categories](System。 Linq.IQueryable'1 [WebMgr.ac_Categories],System.Collections.Generic.IEqualityComparer'1 [WebMgr.ac_Categories])'方法,並且此方法不能轉換爲存儲表達式。 –

+1

擴展爲IEnumerable,而不是IQueryable – Grundy

+0

y ...我明白了...我必須使用AsEnumerable() –

相關問題