无法选择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;
}
}
答案 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 - 是吗?如果是这样,实体集的名称通常是实体名称的复数。所以,我希望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
类型的定义,所以我无法说明这是否属实。)