如果这是一个重复的问题,我很抱歉。如果重复,请告诉我在哪里可以找到它。
我发现很难理解分组的概念,特别是如何处理分组结果。任何人都可以解释我如何处理多列字典分组的结果。
我有
类型的字典Dictionary<string, AsynchRunItem2> AsynchRunItems.
string是我们使用其他4个属性生成的关键。
AsynchRunItem2具有以下属性:
string UniverseIDs;
DateTime StartDate;
DateTime EndDate;
在AsynchRunItems中,我得到了四条记录。请参阅下面的值。我离开了凯斯。
UniverseIDs:15 StartDate:10/9/2013 EndDate : 10/31/2013
UniverseIDs:20 StartDate:10/9/2013 EndDate : 10/31/2013
UniverseIDs:50,55 StartDate:09/30/2013 EndDate : 10/31/2013
UniverseIDs:60,64 StartDate:09/30/2013 EndDate : 10/31/2013
我想在StartDate和EndDate上对AsynchRunItems进行分组,这样我就可以使用Lambda而不是LINQ了。
UniverseIDs:15,20 StartDate:10/9/2013 EndDate : 10/31/2013
UniverseIDs:50,55,60,64 StartDate:09/30/2013 EndDate : 10/31/2013
我正如下面的分组,但想知道如何处理分组结果
var temp = AsynchRunItems.GroupBy(g => new { g.Value.StartDate,g.Value.EndDate});
我想知道如何前进并研究临时工,以便我能得到我想要的东西。
答案 0 :(得分:0)
如果您只是想将结果显示为分组(当然可以使用当前的GroupBy()
方法),请执行以下操作:
foreach(var t in temp)
{
Console.WriteLine("UniverseIDs: {0} StartDate:{1} EndDate: {2}", string.Join(", ", t.ToList().Select (x => x.Value.UniverseIDs).ToArray()), t.Key.StartDate, t.Key.EndDate);
}
当我快速尝试复制样本值时,这给了我输出结果:
UniverseIDs:15,20 StartDate:10/9/2013 EndDate: 10/31/2013
UniverseIDs:50,55,60,64 StartDate:9/30/2013 EndDate:10/31/2013
如果您对temp变量中包含的内容感到困惑,请参阅Tony的回答。
答案 1 :(得分:0)
GroupBy返回一组IGrouping对象,其中每个IGrouping对象都有一个Key属性,它本身也是一个集合 - 来自原始集合(AsynchRunItems)的项集合。因此,您可以看到GropyBy作为集合的集合返回,您可以执行诸如循环遍历IGrouping对象集合之类的操作,或循环遍历特定IGrouping对象中的项目。或者您可以使用Enumerable扩展函数来操作其中任何一个。
也许你对原始集合是一个字典的事实感到困惑。因为Dictionary是KevValuePair对象的集合,所以GroupBy方法返回的每个IGrouping对象都是相同类型的KeyValuePair对象的集合。如果你这样做可能会更容易理解:
var groupedAsynchRunItems
= AsynchRunItems.GroupBy(kvp => kvp.Key)
.Select(g => g.ToDictionary(kvp => kvp.Key, kvp => kvp.Value));
这将返回一个集合,其中每个IGrouping都已转换为Dictionary。通过这样做,您将丢失IGrouping对象的Key属性。实际上,你应该这样做的唯一原因是你需要使用Dictionary类成员的功能。我只是建议它作为一种学习IGrouping如何工作的方式。我们甚至可以在这里做得更好:
var groupedAsynchRunItems
= AsynchRunItems.GroupBy(kvp => kvp.Key)
.ToDictionary(g => g.Key, g => g.ToDictionary(kvp => kvp.Key, kvp => kvp.Value));
它为您提供了一个词典词典,它可能有助于显示GroupBy方法的返回值如何类似于词典。