2013-05-25 3 views
-2

не может выбрать конкретный столбец в Linq получил эту ошибкуInstance аргумент: не может конвертировать из IEnumerable <AnonymousType # 1> в ParallelQuery <SalesTaxRate>

не может конвертировать из «System.Collections.Generic.IEnumerable < AnonymousType # 1 >»на 'System.Linq.ParallelQuery < LINQ.SalesTaxRate>'

private void Button_Click_7(object sender, RoutedEventArgs e) 
{ 
    using (LinqContainer context = new LinqContainer()) 
    { 
     List<SalesTaxRate> salesTaxRateList = (from c in context.SalesTaxRates 
               select new {c.TaxRate }) 
                .ToList<SalesTaxRate>(); 
     grid.ItemsSource = salesTaxRateList; 

    } 
} 
+0

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

+0

вот код, когда я выбираю new.I получил сообщение об ошибке ay .ToList –

+0

Спасибо, я не могу ответить на это, но это должно помочь кому-то посмотреть, что происходит :) – greedybuddha

ответ

2

Я думаю, что проблема с select new {c.TaxRate} частью следующей строки

 List<SalesTaxRate> salesTaxRateList = (from c in context.SalesTaxRates 
                select new {c.TaxRate }) 
                 .ToList<SalesTaxRate>(); 

SalesTaxRate Для каждого объекта в context.SalesTaxRates, это создает объект с anonymous type. Этот анонимный тип имеет одно свойство TaxRate, тип которого является типом имущества TaxRate. Вы получаете ошибку компилятора, потому что компилятор C# не может понять, как конвертировать экземпляры этого анонимного типа в SalesTaxRate.

Вы не показали, как определяется SalesTaxRates. Мне кажется, что это Entity Framework EntitySet - не так ли? Если это так, имена наборов объектов часто являются множественными именами объекта. Итак, я ожидал бы, что SalesTaxRates будет представлять собой коллекцию SalesTaxRate объектов. Если это так, то код, который вы хотите,

 List<SalesTaxRate> salesTaxRateList = context.SalesTaxRates.ToList(); 

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

 List<SalesTaxRate> salesTaxRateList = (from c in context.SalesTaxRates 
                select c.TaxRate) 
                 .ToList(); 

(если я не понял, это будет означать, что ваши SalesTaxRate объекты context.SalesTaxRates имеют свойство с именем TaxRate, а также типа SalesTaxRate не имеют определение вашего SalesTaxRate так что я не могу сказать, является ли это верно.)

+0

Но это не объясняет часть 'ParallelQuery' сообщения об ошибке, правильно? – svick

+0

@svick: нет, это не так. Есть много вопросов по этому вопросу, которые неясны, и это один из них. –

3

Проблема заключается в том, что вы не можете бросить анонимного типа к объекту SalesTaxRate

new { c.TaxRate } 

Это не создает объект SalesTaxRate и ParallelQuery <AnonymousType> не может быть преобразован его в список <SalesTaxRate>

TRY

new SalesTaxRate(c.TaxRate) 

или

new SalesTaxRate { TaxRate = c.TaxRate } 
Смежные вопросы