2015-03-26 2 views
0

мне нужна ваша помощьC# Linq, определение объекта не содержит свойство

Я просто написал следующий код

var anynomousObject = new { Amount = 10, weight = 20 }; 

List<object> ListOfAnynomous = new List<object> { anynomousObject }; 
var productQuery = 
      from prod in ListOfAnynomous 
      select new { prod.Amount, prod.weight }; // here it object on 'prod.Amount, prod.weight' that the object defenetion does not contains the "Amount" and "weight" properties 

foreach (var v in productQuery) 
    { 
    Console.WriteLine(v.Amount, v.weight); 
    } 

поэтому, пожалуйста, не могли бы вы помочь мне решить эту проблему.

+2

Попробуйте '' вместо 'List ' – DavidG

+1

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

+1

Вы не можете использовать 'object' и ожидать, что вы можете использовать все свойства или методы без кастинга. Но кастинг анонимному типу невозможно (легко). Посмотрите на метод Jon Skeets 'GrottyHacks.Cast', который приводится на примере. http://codeblog.jonskeet.uk/2009/01/09/horrible-grotty-hack-returning-an-anonymous-type-instance/ Ваш «anynomousObject» будет примером. –

ответ

2

Вам нужно сделать класс вашего определения объекта, или с использованием динамического keywork вместо бокса в объекте:

var anynomousObject = new { Amount = 10, weight = 20 }; 

List<dynamic> ListOfAnynomous = new List<dynamic> { anynomousObject }; 
var productQuery = 
        from prod in ListOfAnynomous 
        select new { prod.Amount, prod.weight }; 

foreach (var v in productQuery) 
{ 
    Console.WriteLine(v.Amount, v.weight); 
} 

Это потому, что, когда вы помещаете в качестве объекта, компилятор не знает определения вашего анонимного var. Dynamic позволяет оценивать его во время выполнения, а не во время компиляции.

Другой вариант - создать класс или структуру.

+0

Спасибо @cdie, но в чем разница между списком и списком в этом случае – Moh

+0

Я отредактировал свой голос, чтобы заметить это – cdie

+0

большое спасибо, я получил его, отличный ответ, я согласен, но сайт не позволяет мне принимать ответы до 8 минут на ответ – Moh

1

Ваш List<object> имеет список object s. Запрос Linq выглядит в этом списке, и все, что он видит, является регулярным object.

Либо использовать класс или структуру для хранения объектов, или использовать List<dynamic>

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