C# LINQ-按值区分?
代码: 但这对于具有相同值的“对象”是不同的。我需要在我的列表中为每个月添加一个C# LINQ-按值区分?,c#,.net,linq,C#,.net,Linq,代码: 但这对于具有相同值的“对象”是不同的。我需要在我的列表中为每个月添加一个myNew。(一月份一个,二月份一个,依此类推)。然后,新闻将获得12条记录 有没有可能是一种不同的(myNew.Month)?您可以按月分组,取第一个或最后一个或其他(您没有告诉我们): 编辑:从对哈比卜回答的评论中,我看到你想要12个月,即使没有消息。然后需要执行“Linq外部联接”: 编辑:由于在代码中实现查询时遇到问题,因此不需要选择也包含月份的匿名类型。您还可以仅选择新闻本身: var monthlyNew
myNew
。(一月份一个,二月份一个,依此类推)。然后,新闻
将获得12条记录
有没有可能是一种不同的(myNew.Month)?您可以按月分组,取第一个或最后一个或其他(您没有告诉我们): 编辑:从对哈比卜回答的评论中,我看到你想要12个月,即使没有消息。然后需要执行“Linq外部联接”: 编辑:由于在代码中实现查询时遇到问题,因此不需要选择也包含月份的匿名类型。您还可以仅选择新闻本身:
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...
}
请注意,您现在收到12条新闻,但当当月没有新闻时,其中一些可能为空。解决方案1。Get(也可以作为NuGet包和use提供
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();
var vNews = News()
.GroupBy(p => p.Month)
.Select(g => g.First())
.ToList();
解决方案2.实施一个速记解决方案
News().DistinctBy(n => n.Property)
如果你有一个月的多个记录,你想如何决定取哪一个?第一个可能?是
News
一组New
元素?@Danny没有需要lambdowell的Distinct重载,我添加的问题的答案是myCustomerList.GroupBy(cust=>cust.CustomerId)。Select(grp=>grp.first())@Perception:这个答案一点也不重复,你可以很容易地从中看到。为什么在这个答案被标记为具有完全相同答案的副本之后再发布这个答案?@DannyVarod:因为1.答案不完全相同(顺便说一句,我以前没有见过这个答案)2.如果OP能澄清他的要求,这两个问题可能会有更大的不同。@DannyVarod:现在好了吗?;-)这里的问题是News()是一个列表。。。似乎我不会写你的代码…@markzzz:那有什么问题?当News
是一个List
write…将n加入m=n的News中,并将n.Month加入m\u n…
。问题是:如果四月不存在于任何新的…我如何插入“null”来代替?
var result = News()
.GroupBy(p => p.Month)
.Select(g => g.First())
.ToList();
var vNews = News()
.GroupBy(p => p.Month)
.Select(g => g.First())
.ToList();
News().DistinctBy(n => n.Property)
var vNews = News()
.GroupBy(p => p.Month, (key, p) => p.FirstOrDefault())
.ToList();