我正在尝试访问字符串而不是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。对不起,所有人都感到困惑,但感谢大家的帮助!