2011-04-29 208 views
1

我必须使用LINQ在Web应用程序中编写查询,但我需要将该查询更改为数组列表。我如何更改下面的查询来执行此操作?如何将LINQ列表更改为arraylist

var resultsQuery = 
    from result in o["SearchResponse"]["Web"]["Results"].Children() 
    select new 
    { 
     Url = result.Value<string>("Url").ToString(), 
     Title = result.Value<string>("Title").ToString(), 
     Content = result.Value<string>("Description").ToString() 
    }; 
+1

不要使用'ArrayList' 。你对结果做什么? – SLaks 2011-04-29 14:13:04

+0

你的意思是'ArrayList'还是'List '?以前,从泛型开始之前的几天,对于LINQ表达式的结果来说,这将是一个不寻常的收集选择,而不是'Array'的优势。 – Richard 2011-04-29 14:13:48

+0

喜谢谢你给的反应其实我有流汗的数据到列表中列出值储存到ArrayList中..... – Victor 2011-04-29 14:24:19

回答

2

如果你真的需要创建一个ArrayList,你可以写new ArrayList(resultsQuery.ToArray())

但是,你应该使用一个List<T>而是通过写resultsQuery.ToList()

需要注意的是,在这两种情况下,该列表将包含匿名类型的对象。

+0

你好谢谢你给我的反应有尝试的ArrayList如ArrayList resultsQuery = O [“SearchResponse”] [“网页”] [ “结果”]儿童();但显示错误 – Victor 2011-04-29 14:22:14

+0

'新的ArrayList(resultsQuery.ToArray())'(或'(从...选择...)。ToArray的()') – SLaks 2011-04-29 14:23:50

+0

嗨,我有尝试上述查询其示值误差..... – Victor 2011-04-29 14:29:24

1

有那将转换的IEnumerable到阵列的.ToArray()方法。

+0

对不起有没有toarray智能不显示toarry它只显示tostring .. – Victor 2011-04-29 14:20:52

+0

你需要包裹整个用()查询然后尝试.ToArray() – 2011-04-29 15:55:13

0

ArrayList没有一个构造函数或添加(范围)方法,它的IEnumerable。这样留下了两个选择:

  • 使用,它实现ICollection中间集合:既是ArrayList<T>工具ICollection可以通过从LINQ的ToArray()ToList()扩展方法可以使用。

  • 创建的ArrayList一个实例,并然后添加结果中的每个元素:

    var query = /* LINQ Expression */ 
    var res = new ArrayList(); 
    foreach (var item in query) { 
        res.Add(item); 
    } 
    

前者的方法是简单的事,但也意味着创建中间数据结构(它的两个选项有更高的开销是一个有趣的问题,部分取决于查询,所以没有一般​​的答案)。后者是更多的代码,确实涉及递增地增长ArrayList(所以GC的内存更多,中间ArrayList<T>的情况将会如此)。

如果你只需要这在一个地方,你可以做内联代码,如果你需要做的是在多个地方建立自己的扩展方法在IEnumerable<T>

public static class MyExtensions { 
    public static ArrayList ToArrayList<T>(this IEnumerable<T> input) { 
    var col = input as ICollection; 
    if (col != null) { 
     return new ArrayList(col); 
    } 

    var res = new ArrayList(); 
    foreach (var item in input) { 
     res.Add(item); 
    } 
    return res; 
    } 
} 
+0

谢谢你给予回应我会试试这个........ – Victor 2011-04-29 15:11:09