2013-04-25 59 views
0

我需要填充许多视图的下拉列表。同样的下拉菜单将被用来编写一个Html Helper方法来生成下拉菜单的内容。.Distinct()子句不工作c#MVC

public static List<SelectListItem> GetBatchNumbers(this HtmlHelper html) 
    { 
     List<SelectListItem> items = new List<SelectListItem>(); 
     ModelContainer ctn = new ModelContainer(); 

     var batchNumbers = ctn.SearchResults.OrderBy(x => x.BatchID).ToList(); 

     foreach (var batch in batchNumbers.Distinct()) 
     { 
      items.Add(new SelectListItem() 
      { 
       Text = batch.BatchID + "-" + batch.WebsiteName + "-" + batch.SourceName, 
       Value = batch.BatchID 
      }); 
     } 

     return items; 
    } 

所以在我的测试数据中,我已经执行了3批搜索结果。所以我想在下拉列表中看到3个批号。但是,我看到SearchResults表中每个条目都重复了一个批号,因此Distinct()子句似乎没有以所需的方式工作。

我读过鲜明的()是棘手的使用对象,没有人知道我可以做到这一点的另一种方式?

+0

什么是信息搜索结果?这是一堂课吗?它是一个结构?它是如何加载的? – TGlatzer 2013-04-25 10:11:32

+0

什么是batchID? – Filip 2013-04-25 10:12:11

+0

@ Grumbler85搜索结果是一个数据库表。它有000个条目,但我只想要检索单个批处理ID,其中应该只有3个。 – 109221793 2013-04-25 10:14:44

回答

7

有一些实现比如IEnumerable<obj>.DistinctBy(o => o.Prop)将通过一个特殊的属性支持不同。

下也适用

list.GroupBy(l => l.Property).Select(group => group.First()) 
+0

这个伎俩。谢谢。一旦时间限制结束,我会将您的答案标记为正确。 – 109221793 2013-04-25 10:18:23