所以我正在处理一个DropDown列表,它可以工作,但是它有很多重复的电子邮件,我只想查看不同的电子邮件...所以我尝试在模型类中执行.Distinct(),但这仍然给了我重复项。
模型类:
public string One_Manager_Email{ get; set; }
public List<Hello> getManagers()
{
var que = (from wr in db.View
select new Hello
{
O_Manager_Email= wr.One_Manager_Email
}).Distinct().ToList();
return que;
}
控制器类:(这可能是发生问题的地方)
public ActionResult Index()
{
test = new Hello();
ViewBag.Managers = new SelectList(test.getManagers(), "", "O_Manager_Email");
return View(test.getStuff());
}
查看课程:
<div>
@Html.DropDownList("Managers", ViewBag.Managers as SelectList)
</div>
任何帮助都会很棒,谢谢!
答案 0 :(得分:0)
完全不同的对象无法使用完全不同的对象,因为对象始终是完全不同的,但是您可以尝试在查询中使用分组依据,具体如下:
var que = (from wr in db.View
group new {wr.One_Manager_Email}
by new {wr.One_Manager_Email} into grouped
select new Hello
{
O_Manager_Email= grouped.Key.One_Manager_Email
}).ToList();
return que;
答案 1 :(得分:0)
您需要根据对象的属性对对象进行分组,然后选择分组的第一个元素。
public List<Hello> getManagers()
{
var que = (from wr in db.View
select new Hello
{
O_Manager_Email= wr.One_Manager_Email
})
.GroupBy(g => g.O_Manager_Email) //group by property
.Select(g => g.First()) //take first element from every grouping
.ToList();
return que;
}
有关更多详细信息,您可以看到这篇文章,其中包含有关分组和区分的更多详细信息:LINQ's Distinct() on a particular property
答案 2 :(得分:0)
如果只需要电子邮件地址,则可以只选择字符串而不是选择Hello对象。如果选择“ Hello对象”并尝试以这种方式区分您,则显然会得到重复的项目。因为每个对象已经是唯一的。
我相信您已经回答了。 GroupBy可能会解决您的问题。但是,除非您确实需要GroupBy,否则不要使用GroupBy!这确实是昂贵的操作。
在这种情况下,您应该使用DistinctBy。
var distinctList = list.DistinctBy(x => x.Prop).ToList();
在您的代码上:
var que = (from wr in db.View
select new Hello
{
O_Manager_Email = wr.One_Manager_Email
}).DistinctBy(x=>x.O_Manager_Email).ToList();
哦,就使用DistinctBy而言,您应该导入Microsoft.Ajax.Utilities的命名空间。
using Microsoft.Ajax.Utilities;