基本上我想要一个接受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列表并返回一个数组。 不幸的是,我所拥有的那个不起作用。
非常感谢,因为任何和所有指针/帮助都将非常受欢迎。
问候
阿扎德
答案 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)
你的问题有点不清楚,所以我不确定我的答案会有多大帮助,但这里有...
object
and then back to a re-creation of your anonymous type,但你最好宣布一个简单的类automatic properties。IEnumerable
转换为数组,只需致电ToArray()
DataBind
到IEnumerable
,无需将其转换为数组DataTable
并将其绑定到DataGrid。答案 3 :(得分:0)
我不确定您是否可以轻松地将匿名对象作为参数传递,而不是将它们作为返回值。
我很容易说,因为:
[尝试问题的代码格式化选项(编辑器中的“按钮”),这样可以更轻松地阅读问题的哪些部分是代码段。]