linq查询过滤textvalue对并​​按值删除重复项

时间:2014-10-01 15:28:39

标签: c# linq linq-to-sql linq-to-entities linq-to-objects

我正在尝试通过删除我的自定义词典中的一些项目来过滤我得到的结果。因此,如果有多个具有相同值的项目,我希望只有一个样本。

这是我存储值的自定义类:

                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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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();