通过字符串foreach iEnumerable参考



我正在尝试访问字符串而不是int的Ienumeraled的内容。

方法

public List<Foo> GetFoo(IEnumerable<Bar> bar)
{
    List<Foo> foo = new List<Foo>();
    var query = from x in bar       
                select new Foo()
                {
                    foo = x.foo,
                    bar = x.bar
                };
    foo = query.ToList();
    return foo;
}

查看

<td>@foo["bar"].foo<td>

我知道以上不存在,但这就是我要做的。如果我做 foo[0].foo,那么 - 很明显 - 工作。

编辑

我推荐了@d Stanley和@Juharr的Dictionary<string,Foo>方法,但我仍然必须通过foreach循环遍历这些结果,以访问KeyValuePair。我正在尝试绕过一个foreach并仅通过密钥访问结果。这可能吗?

public Dictionary<string,Foo> GetFoo(IEnumerable<Bar> bar)
{
    var query = from x in bar               
                select new Foo()
                {
                    foo = x.foo,
                    bar = x.bar
                };
    return query.ToDictionary(f=>f.foo,f=>f);            
}

List结构没有任何紧凑的结构。它只有一个接受整数的索引器(您想要的项目的索引)。一些选项:

  • 子类型List<Foo>添加接受字符串的索引器
  • 使用字典代替 List<Foo>

    public Dictionary<string,Foo> GetFoo(IEnumerable<Bar> bar)
    {
        var query = from x in bar       
                    select new Foo()
                    {
                        x.foo,
                        x.bar
                    };
        return query.ToDictionary(f => f.bar, f => f));
    }
    

然后foo["bar"]将给出由"bar"索引的Foo对象。您无需迭代整个集合即可使用匹配键找到对象。

随着更多的挖掘,我能够通过c#对象列表找到答案,如何获得属性的总和

使用上面的示例,我使用linq:

实现了以下逻辑

方法

public List<Foo> GetFoo(IEnumerable<Bar> bar)
{
    List<Foo> foo = new List<Foo>();
    var query = from x in bar       
                select new Foo()
                {
                    name= x.name,
                    amount = x.amount
                };
    foo = query.ToList();
    return foo;
}

查看

@double total = foo.Where(item => item.name == "jon").Sum(item => item.amount);    
<td>@total<td>

在我看来,我将用一个变量代替"乔恩",以减轻供应方面的foreach。对不起,所有人都感到困惑,但感谢大家的帮助!

最新更新