【问题标题】:linq to entities cannot convert type Icollection to type Listlinq to entity 无法将 Icollection 类型转换为 List 类型
【发布时间】:2012-11-05 23:14:49
【问题描述】:

我正在使用实体框架。 我有以下实体:

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;

给出编译器错误:

不能隐式转换类型'System.Collections.Generic.List >' 到 'System.Collections.Generic.List '

我怎样才能得到我的List &lt; Fornitore &gt;

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    好吧,您实际上是在尝试选择多个集合,我认为这就是您的问题所在,将您的 Select 更改为 SelectMany 可能会为您解决问题,但我不确定这是否是您想要的功能。将会发生的事情是SelectMany 会将所有单独的结果集压缩到一个集合中,然后可以将其转换为模型类型的列表与模型类型的集合列表。

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

    【讨论】:

    • 每个 Articolo 都有很多 Fornitori - 所以你得到一个列表列表...(实际上是一个集合列表)
    • 也可能是 Op 预期的 .First().Fornitori.ToList() 而不是 .SelectMany(p => p.Fornitori)`
    【解决方案2】:

    每个 Articolo 都有很多 Fornitori - 所以你会得到一个列表列表......

    您可能的意思是只获取具有 matchign id 的匹配单个项目...

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

    【讨论】:

    • 非常感谢'First'工作正常:var r = zefiroContext.Articoli.First(p => p.Id == IdArticolo).Fornitori.ToList();
    • 很高兴我能帮上忙。如果它解决了您的问题,请考虑accepting this as the solution。您还应该查看Single(),如果返回多于或少于 1 个结果(如果 0 或 2+ 与 Id 字段匹配),它将引发异常。 SingleOrDefault() 将接受 0 或 1 个结果。 FirstOrDefault() 将接受任意数量的结果。 All 将只返回一个对象(如果允许,则返回 null 没有结果)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多