Use linq distinct function?
如何使用linq distinct运算符删除重复的coures.cours.name,
1 2 3 4 5 6 7
| var coursesList = from courses in not_subsribe
select new SelectListItem
{
Text = courses .Cours.Name,
Value = courses .Cours.ID
.ToString()
}; |
您可以对具有这两个属性的匿名类型使用GroupBy,使其与众不同:
1 2 3 4 5 6 7 8 9
| var coursesList =
from c in not_subsribe
group c by new { Id = c .Cours.ID, Name = c .Cours.Name } into g
order by g .Key.Name
select new SelectListItem
{
Text = g .Key.Name,
Value = g .Key.Id
}; |
这是因为匿名类型会自动覆盖Equals+GetHashCode,满足GroupBy+Distinct的需要。所以现在您也可以使用Distinct:
1 2 3 4 5 6 7 8 9
| var coursesList = not_subsribe
.Select(c => new { Id = c .Cours.ID, Name = c .Cours.Name })
.Distinct()
.OrderBy(x => x .Name)
.Select(x => new SelectListItem
{
Text = g .Key.Name,
Value = g .Key.Id
}); |
- 或者你可以只调用匿名对象Select,然后调用Distinct。
- @罗林:好的,我已经编辑了我的答案。我使用了GroupBy,因为op已经使用了查询语法,我不喜欢混合使用查询语法和方法语法。
你可以使用:
1 2 3 4 5 6
| var coursesList = courses .DistinctBy(c => courses .Cours.Name)
.Select(crs => new SelectListItem
{
Text = crs .Cours.Name,
Value = crs .Cours.ID.ToString()
}); |
对不起,我忘了提一下,DistinctBy方法可在名为morelinq的第三方库中使用。此库可使用nuget package manager从以下位置下载:http://www.nuget.org/packages/morelinq/
你可以在这里找到更多关于morelinq的信息:https://code.google.com/p/morelinq/
- 你至少应该提到DistinctBy不是.NET的一部分,而是morelinq的一部分。
- @Timschmelter对不起,我忘了提Morelinq了。谢谢你提醒我。