2013-05-15 70 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);