【问题标题】:How can I return the Value from a .NET IGrouping via a Key?如何通过键从 .NET IGrouping 返回值?
【发布时间】:2015-11-20 11:35:54
【问题描述】:

我正在努力弄清楚如何检索 IGrouping 实例的 Value 部分。

我有以下几点:

IList<IGrouping<string, PurchaseHistory> results = someList.GroupBy(x => x.UserName);

我现在希望遍历每个集合并检索该用户的购买历史记录(并检查购买历史记录集合中是否存在某些东西)。

【问题讨论】:

标签: c# .net linq igrouping


【解决方案1】:

嵌套循环怎么样?

IList<IGrouping<string, PurchaseHistory>> results = someList.GroupBy(x => x.UserName);

foreach (IGrouping<string, PurchaseHistory> group in results)
{
    foreach (PurchaseHistory item in group)
    {
        CheckforStuff(item);
    }
}

或一个带有 linq 语句的循环

IList<IGrouping<string, PurchaseHistory>> results = someList.GroupBy(x => x.UserName);
foreach (IGrouping<string, PurchaseHistory> group in results)
{
    bool result = group.Any(item => item.PurchasedOn > someDate);
}

【讨论】:

  • 不是做第二个循环 - 有没有办法检查是否存在具有...我不知道 ..item.PurchasedOn &gt; someDate 的 PurchaseHistory ?
  • 嗯 - 我试过了......啊!我尝试了结果。任何(...)..哎呀!它在group.Any(..) 上。塔。明白了。
【解决方案2】:

打电话..

IList<IGrouping<string, PurchaseHistory> results = someList
    .GroupBy(x => x.UserName);
    .Select(result => (result.Key, result.Any(SomeStuffExists)));

与..

bool SomeStuffExists(PurchaseHistory item)
{
    return ..
}

产生类似...的元组

  • ("UserNameX", true)
  • ("UserNameY", false)
  • ..

【讨论】:

    【解决方案3】:

    如果您想遍历所有项目,这就是这种方式

    foreach (IGrouping<int, YourClass> value in result)
    {
        foreach (YourClass obj in value)
        {
          //Some Code here          
        }
    }
    

    如果您想按键搜索某些东西,这就是这种方式

    List<YourClass> obj1 = result.Where(a => a.Key 
    == 12).SingleOrDefault().Where(b=>b.objId.Equals(125)).ToList();
    

    (在这种情况下,键被视为'int')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-21
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多