-2

无法在 Linq 中选择特定列出现此错误

无法从“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;

    }
}
4

2 回答 2

3

问题是您不能将匿名类型转换为 SalesTaxRate 对象

new { c.TaxRate } 

这不会创建 SalesTaxRate 对象,并且 ParallelQuery<AnonymousType> 无法将其转换为 List<SalesTaxRate>

尝试

new SalesTaxRate(c.TaxRate)

或者

new SalesTaxRate { TaxRate = c.TaxRate }
于 2014-02-07T19:06:50.877 回答
2

我认为问题select new {c.TaxRate}出在以下行的一部分

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

对于 中的每个SalesTaxRate对象context.SalesTaxRates,这都会创建一个匿名类型的对象。这个匿名类型有一个属性TaxRate,它的类型是属性的类型TaxRate。您收到编译器错误,因为 C# 编译器无法弄清楚如何将此匿名类型的实例转换为SalesTaxRate.

您还没有显示如何SalesTaxRates定义。在我看来它是一个实体框架 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,也是 type SalesTaxRate。我没有你的SalesTaxRate类型的定义,所以我不能说这是否属实。)

于 2013-05-25T09:15:08.217 回答