2012-11-05 116 views
1

我正在使用实体框架。 我有以下实体:LINQ to entities can not convert type Icollection to type List

public class Articolo 
{ 
    .. 
    public virtual ICollection<Fornitore> Fornitori { get; set; } 
} 

public class Fornitore 
{ 
    ... 
    public virtual ICollection<Articoli> Articoli { get; set; } } 

下面的代码:

List<Fornitore> result = new List<Fornitore>(); 
var r = zefiroContext.Articoli.Where(p => p.Id == IdArticolo).Select(p => p.Fornitori).ToList(); 
result = r; 

给出了一个编译器错误:

Cannot implicitly convert type 'System.Collections.Generic.List < System.Collections.Generic.ICollection < prova2.Model.Fornitore>>' to 'System.Collections.Generic.List < prova2.Model.Fornitore>'

我怎样才能让我的List <Fornitore>

回答

4

那么你实际上试图选择多个集合,我认为这是你的问题所在,将Select更改为SelectMany可能会为您解决问题,但我不确定这是否是您的预期功能。将要发生的是SelectMany将把所有单独的结果集压缩成单个集合,然后可以将其转换为模型类型列表与模型类型集合列表。

var r = zefiroContext.Articoli.Where(p => p.Id == IdArticolo).SelectMany(p => p.Fornitori).ToList(); 
+0

每个Articolo有许多Fornitori - 所以你得到一个列表...(其实,一个集合列表) – Basic

+0

也可能是操作预期'.First()。Fornitori.ToList()'而不是.SelectMany(p => p.Fornitori)' – McGarnagle

0

每个Articolo有许多Fornitori - 所以你得到一个列表的列表...

您可能意味着与matchign ID只得到匹配的单个项目...

var r = zefiroContext.Articoli.First(p => p.Id == IdArticolo).Select(p => p.Fornitori).ToList(); 
+0

非常感谢'First'的运作良好:var r = zefiroContext.Articoli.First(p => p.Id == IdArticolo).Fornitori.ToList(); – ollo

+0

很高兴我能帮到你。如果它解决了你的问题,请考虑[接受这个解决方案](http://stackoverflow.com/faq#howtoask)。您还应该查看Single(),如果返回多个或少于1个结果(如果0或2+与Id字段匹配),将抛出异常。 'SingleOrDefault()'将接受0或1个结果。 'FirstOrDefault()'将接受任意数量的结果。所有将只返回一个对象(如果允许,则返回null) – Basic