2014-10-01 57 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();