2008-11-28 5 views
0

По сути, я хочу иметь общую функцию, которая принимает анонимный список LINQ и возвращает массив обратно. Я надеялся использовать дженерики, но я просто могу заставить его работать.Как вернуть массив из функции из анонимного списка LINQ?

многообещающе ниже пример помогает

сказать у меня есть человек объект с идентификатором, имя_файлом, LName и DOB. У меня есть общий класс, содержащий список объектов.

я возвращать массив лиц назад

мой фрагмент кода будет что-то вроде

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

я теперь анонимный тип из system.collections.generic.ineumerable (триплетов)

, чтобы связать это с сеткой, мне пришлось бы перебирать и добавлять в массив eg

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 и возвращает массив назад. К сожалению, у меня нет работы.

большое спасибо заранее, так как любые указатели/помощь будут ВКЛЮЧЕНЫ.

рассматривает

Азад

ответ

1

Ваш вопрос немного непонятно, так что я не уверен, насколько мои ответы помогут, но здесь идет ...

  • An anonymous type has method scope так что вы не можете верните его из функции, по крайней мере, не в строго типизированном виде. You can cast to object and then back to a re-creation of your anonymous type, но вам было бы лучше объявить простой класс с некоторыми automatic properties.
  • Для преобразования IEnumerable в массив, просто вызовите ToArray()
  • Однако, вы можете DataBind к IEnumerable напрямую, не нужно, чтобы преобразовать его в массив
  • Если данные вы имеете дело с может иметь различные поля, то вам может быть лучше создать DataTable и привязать его к вашему DataGrid.
0

Я не уверен, что вы можете легко передавать анонимные объекты в качестве параметров, больше, чем вы можете использовать их в качестве возвращаемых значений.

Я говорю легко, потому что:

[Попробуйте код форматирования опции на ваш вопрос (кнопка "в редакторе), это сделало бы его проще прочитать части вашего вопроса, которые являются фрагментами кода.]

2

Вы бы jus t позвонить ToArray. Конечно, тип анонимный ... но из-за вывода типа вам не нужно указывать имя типа.

В примере кода:

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

Компания случается струна, но нет никаких причин, не может быть ничем иным.

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, который устраняет необходимость в цикле. Я также назначаю его типу объекта [], чтобы продемонстрировать, что вы можете передать его как свой тип, если хотите.

Смежные вопросы