如何从LINQ匿名列表中的函数返回一个数组?

时间:2008-11-28 10:00:53

标签: vb.net linq generics

基本上我想要一个接受LINQ匿名列表并返回数组的泛型函数。我希望使用泛型,但我似乎可以让它工作。

希望以下示例有助于

说我有一个id,fname,lname和dob的person对象。 我有一个泛型类,包含一个对象列表。

我回来了一大群人

我的代码段就像

dim v = from p in persons.. select p.fname,p.lname

我现在有一个来自system.collections.generic.ineumerable(of t)的匿名类型

将其绑定到网格我将不得不迭代并添加到数组 e.g。

dim ar() as array

for each x in v
    ar.add(x)
next

grid.datasource = ar

我不想继续进行迭代,因为我可能有不同的对象

我想要一个像下面这样的功能:

function getArrayList(of T)(dim x as T) as array()

    dim ar() as array

    for each x in t
       ar.add(x)
    next

    return ar
end

希望澄清。我怎么能得到一个泛型函数接受一个匿名的ienumearable列表并返回一个数组。 不幸的是,我所拥有的那个不起作用。

非常感谢,因为任何和所有指针/帮助都将非常受欢迎。

问候

阿扎德

4 个答案:

答案 0 :(得分:3)

您可以将网格直接绑定到匿名类型数组。这是一个例子:

        var qry = from a in Enumerable.Range(0, 100)
                  select new { SomeField1 = a, SomeField2 = a * 2, SomeField3 = a * 3 };
        object[] objs = qry.ToArray();
        dataGridView1.DataSource = objs;

还要注意对ToArray的调用,这样就不需要循环了。我还将它分配给一种对象[],以证明你可以根据需要将它传递给它。

答案 1 :(得分:2)

你只需致电ToArray。当然,类型是匿名的......但由于类型推断,您不必说出类型的名称。

来自示例代码:

    packages _
    .Select(Function(pkg) pkg.Company) _
    .ToArray()

公司恰好是字符串,但没有理由不能成为其他任何东西。

答案 2 :(得分:1)

你的问题有点不清楚,所以我不确定我的答案会有多大帮助,但这里有...

答案 3 :(得分:0)

我不确定您是否可以轻松地将匿名对象作为参数传递,而不是将它们作为返回值。

我很容易说,因为:

[尝试问题的代码格式化选项(编辑器中的“按钮”),这样可以更轻松地阅读问题的哪些部分是代码段。]