2014-10-01 72 views
1

我想通過刪除我的自定義字典中的一些項目的價值來篩選結果。所以如果有多個具有相同值的項目,我想只有一個樣本。linq查詢過濾textvalue對,並刪除重複的值

這是自定義類,我在那裏我存儲的值:

   public class ValuePair 
       { 
        public string Text { get; set; } 
        public string Value { get; set; } 
       } 

這裏是我如何檢索值:

List<ValuePair> items = GetResults(db)    
       .AsEnumerable() 
       .Distinct() 
       .Select(v => new TextValuePair 
       { 
        Text = ToTitleCase(v.NameOfTown), 
        Value = v.NameOfTown 
       })    
       .ToList(); 

我想知道我是怎麼可以刷新結果,並只獲取由值過濾的項目的一個樣本,而不是按鍵。

任何想法我可以做到這一點?

由於提前,Laziale

回答

1

您可以通過Value組,然後拿第一分組項目的項目。

List<ValuePair> items = GetResults(db)    
      .AsEnumerable() 
      .Distinct() 
      .Select(v => new TextValuePair 
      { 
       Text = ToTitleCase(v.NameOfTown), 
       Value = v.NameOfTown 
      }) 
      .GroupBy(x => x.Value) 
      .Where(x => x.Key == "filter") // filter by Value (the prop name is Key) 
      .Select(x => x.First()) 
      .ToList(); 
+1

感謝@tsuta你的解決方案幫助了我,我將它標記爲4分鐘內的答案。 – Laziale 2014-10-01 15:39:11

1

您可以使用此https://code.google.com/p/morelinq/librarry它有一個叫做

DistictBy擴展方法,然後你可以

List<ValuePair> items = GetResults(db)    
       .AsEnumerable() 
       .Select(v => new TextValuePair 
       { 
        Text = ToTitleCase(v.NameOfTown), 
        Value = v.NameOfTown 
       }).DisrinctBy(c=>c.Value)   
       .ToList();