2014-02-19 3 views
4

Я хотел бы знать, как мы можем запросить в ArrayList анонимного типа с помощью LINQLINQ запрос для типов анонимного

У меня есть ArrayList типа Анонимус

var pairs = new ArrayList() { new { id = 1, name = "ram" },` new { id = 2, name = "ramesh" } }; 

Я хочу иметь что-то, чтобы работать как ниже

это не работает, потому что анонимный тип компилятор может получить только тип во время компиляции, как мы справиться с этим, любые идеи?

+0

Почему ArrayList? Требуется ли его использовать? –

+0

Не используйте 'ArrayList', используйте' List' или просто массив. – Servy

+0

Ну 'ArrayList' был использован, потому что вы не можете выполнить общий параметр' List ', когда вы просто объявляете новый в строке. Не знаю, почему вы хотите сделать это с анонимными типами. Измените его из 'ArrayList' (который даст вам« объект ») в массив:' pairs = new [] {new {... '. –

ответ

4

Вы можете использовать dynamic типа для решения типа во время выполнения:

var query = from dynamic stud in pairs 
       where stud.id == 1 
       select stud; 

ПРИМЕЧАНИЯ: Я предлагаю вам использовать общий сбор или, событие лучше - создать хороший названный класс для хранения данных. Предположим, она должна выглядеть

public class Student 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

Затем создайте список студентов и запросить этот список

var students = new List<Student> { 
     new Student { Id = 1, Name = "ram" }, 
     new Student { Id = 2, Name = "ramesh" } 
    }; 
+1

Конечно, это означает, что вы теряете всю безопасность типа времени компиляции, а также имеете довольно заметную производительность при запуске компилятора для каждого элемента в списке. – Servy

+1

@Servy Compiler? DLR делает много хорошего кэширования. Хотя я обычно не выступал за это как решение такой проблемы. –

+0

@sergey Спасибо много .. Я ищу что-то, что получает тип динамически, «динамический» решает проблему ... – Shekar

7

ArrayList очень старая часть .Net - не использовать его. Если вы используете анонимный массив, все будет работать:

var pairs = new [] { new { id = 1, name = "ram" }, new { id = 2, name = "ramesh" } }; 
var query = from stud in pairs 
      where stud.id == 1 
      select stud; 
Смежные вопросы