2013-05-15 75 views
1

我有下面的classlinq查詢我正在使用填充gridLinq查詢的不同值

Title對於返回的每一行都是一樣的。我試圖做的是從查詢填充mStringdistinctTitle,這樣我就可以將它綁定到單獨的文本塊。

我可能不需要顯示所有的代碼,但也許它會有所幫助。我如何顯示distinct Title

public class Items 
{ 
    public int Id { get; set; } 
    public string Details { get; set; } 
    public string Title { get; set; } 
    public int NewNumber { get; set; } 
} 

private ObservableCollection<Items> mItem = new ObservableCollection<Items>(); 
private string mString = string.Empty; 

public string SpecTitle 
{ 
    get { return mString; } 
} 

public ObservableCollection<Items> GetItems 
{ 
    get { return mItem; } 
} 

這裏是LINQ查詢

var results = (from z in mContext.View 
       orderby z.ItemNumber ascending 
       where z.ItemId == mId 
       select new Items() 
       {           
        Id = z.ItemId, 
        Details = z.Details, 
        Title = z.ItemTitle, 
        NewNumber = z.ItemNumber 
       }); 

List<Items> mNewItems = results.ToList(); 
mItem.Clear(); 
mNewItems.ForEach(y => mItem.Add(y)); 
+7

'Items.Select(X => x.Title).Distinct();'.. –

+1

@HighCore你應該把它作爲答案。 – Magnus

回答

4
var titleList = mNewItems.Select(i => i.Title).Distinct().ToList(); 
2

有一個額外的庫調用moreLinqhttps://code.google.com/p/morelinq/具有您能不能請你獨特的基於給定鍵的extenction distinctby。

它將作爲笑着,因爲這

var results = (from z in mContext.View 
           orderby z.ItemNumber ascending 
           where z.ItemId == mId 
           select new Items() 
           {           
            Id = z.ItemId, 
            Details = z.Details, 
            Title = z.ItemTitle, 
            NewNumber = z.ItemNumber 

           }).DistinctBy(c=>c.Title).ToList(); 
+2

+1提及Great @ JonSkeet的'MoreLinQ'。 –

+0

嗯,我不明白你爲什麼需要一個額外的庫。這與GroupBy的First() – Magnus

+0

相同,因爲基於他的問題var結果他有幾個字段而不僅僅是標題,只使用distinct而不是隻用title來區分,但是distictBy我不確定使用GroupBy與First()I只要使用DistinctBy就可以更快地想到它 –

4

我的意見轉換成回答:

只是做Items.Select(x => x.Title).Distinct();

1

您可以實現自定義比較明顯的爲:?

public class ItemsComparer : IEqualityComparer<Items> 
{ 
    public bool Equals(Items x, Items y) 
    { 
     return x.Title == y.Title; 
    } 

    public int GetHashCode(Items obj) 
    { 
     return obj.Title.GetHashCode(); 
    } 
} 

就用

var titleList = mNewItems.Distinct(new ItemsComparer()).Select(t=>t.Items);