代码:
news = (from New myNew in new News()
select myNew).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
但是这个区别是具有相同值的"对象".myNew每个月我都需要在我的名单中.(一个用于一月,一个用于februaru,依此类推).比,news将获得12记录.
有可能是某种Distinct(myNew.Month)?
Tim*_*ter 14
您可以按月分组并采取第一个或最后一个或任何(您没有告诉我们):
var news = News()
.GroupBy(n => n.Month)
.Select(grp => grp.Last());
Run Code Online (Sandbox Code Playgroud)
编辑:从对Habib答案的评论中我发现,即使没有新闻,你也想要12个月.然后你需要做一个"Linq Outer-Join":
var monthlyNews = from m in Enumerable.Range(1, 12) // left outer join every month
join n in News() on m equals n.Month into m_n
from n in m_n.DefaultIfEmpty()
group n by m into MonthGroups
select new {
Month = MonthGroups.Key,
LastNews = MonthGroups.Last()
};
foreach (var m in monthlyNews)
{
int month = m.Month;
var lastNewsInMonth = m.LastNews;
if (lastNewsInMonth != null) ; // do something...
}
Run Code Online (Sandbox Code Playgroud)
编辑:由于您在代码中实现查询时遇到问题,因此您无需选择包含月份的匿名类型.您也可以只选择新闻本身:
var monthlyNews = from m in Enumerable.Range(1, 12) // every motnh
join n in news on m equals n.Month into m_n
from n in m_n.DefaultIfEmpty()
group n by m into MonthGroups
select MonthGroups.Last();
Run Code Online (Sandbox Code Playgroud)
请注意,您现在可以收到12条新闻,但有些可能是null当月没有新闻的时候.
var result = News()
.GroupBy(p => p.Month)
.Select(g => g.First())
.ToList();
Run Code Online (Sandbox Code Playgroud)
解决方案1.获取MoreLinq(也可以作为NuGet软件包使用)
News().DistinctBy(n => n.Property)
Run Code Online (Sandbox Code Playgroud)
解决方案2.实现IEqualityComparer并使用此Distinct()重载。
| 归档时间: |
|
| 查看次数: |
14788 次 |
| 最近记录: |