我对C#和VB.NET都很好
我有一个函数GetListOfBook
,它返回LINQ to SQL结果,该结果包含如下所示的对象集合:
var result = GetListOfBook();
所以在收藏家里面,它看起来像这样:
所以在“结果”集合中,它看起来像这样:
{Book = {Book}, Category = "English", Author = {Author}}
{Book = {Book}, Category = "English", Author = {Author}}
{Book = {Book}, Category = "Web Development", Author = {Author}}
我想迭代集合中的每个项目以获取图书标题和ISBN,类别和作者姓名。像这样:
foreach (var r in result)
{
Respone.Write(r.Book.Title, r.Book.ISBN, r.Category, r.Auhtor.Name);
}
目前,我无法迭代收藏品。谢谢你的任何建议。
更新
对不起,不好意思。这实际上是有效的。我在代码中发现了拼写错误。
答案 0 :(得分:7)
您仍需要使用foreach
的正确语法,该语法要求您指定循环变量的类型。由于您无法明确命名,因此需要使用var
来推断类型。
foreach (var r in result)
{
Respone.Write(r.Book.Title, r.Book.ISBN, r.Category, r.Auhtor.Name);
}
答案 1 :(得分:3)
您需要使用{em>隐式类型变量使用var
作为foreach
中的迭代变量,正如您可能会以查询开头一样:
var result = ...; // Your existing query
// r is implicitly typed here
foreach (var r in result)
{
Response.Write(r.Book.Title, r.Book.ISBN, r.Category, r.Author.Name);
}
编辑:仔细查看您的代码,我怀疑这是问题:
var result = GetListOfBook();
如果它返回匿名类型,则不能强类型...这意味着它必须返回IEnumerable
或IEnumerable<object>
之类的内容。我怀疑您需要创建一个合适的“普通”类型来包含GetListOfBook
的结果 - 或者使用与Response.Write
调用相同的方法执行查询。
答案 2 :(得分:2)
你可以使用这样的反射:
foreach (var r in result)
{
PropertyInfo info = r.GetProperty("Category");
Response.Write(info.GetValue(r, null));
}
答案 3 :(得分:1)
您可以使用反射来访问匿名类型的属性 你可以在这里看到一些样品: http://blogs.msdn.com/b/wriju/archive/2007/10/26/c-3-0-anonymous-type-and-net-reflection-hand-in-hand.aspx
但如果你必须使用匿名类型而不是显式类型,那么你应该真的做到最后。