实例参数:无法从IEnumerable <anonymoustype#1>转换为ParallelQuery <salestaxrate> </salestaxrate> </anonymoustype#1>

时间:2013-05-25 06:26:35

标签: c# linq

无法选择Linq中的特定列得到此错误

  

无法转换为'System.Collections.Generic.IEnumerable&lt; AnonymousType#1&gt;'到'System.Linq.ParallelQuery&lt; LINQ.SalesTaxRate&gt;'

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;

    }
}

2 个答案:

答案 0 :(得分:3)

问题是您无法将匿名类型强制转换为SalesTaxRate对象

new { c.TaxRate } 

这不会创建SalesTaxRate对象和ParallelQuery&lt; AnonymousType&gt;无法将其转换为List&lt; SalesTaxRate&gt;

尝试

new SalesTaxRate(c.TaxRate)

new SalesTaxRate { TaxRate = c.TaxRate }

答案 1 :(得分: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。它看起来像是一个实体框架EntitySet - 是吗?如果是这样,实体集的名称通常是实体名称的复数。所以,我希望SalesTaxRatesSalesTaxRate个对象的集合。如果是这种情况,您想要的代码是

        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类型的定义,所以我无法说明这是否属实。)

相关问题