C# 无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IList”

C# 无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IList”,c#,.net,linq,exception-handling,linq-to-entities,C#,.net,Linq,Exception Handling,Linq To Entities,我有一个方法: public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname) { DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities(); DzieckoAndOpiekunCollection result = new

我有一个方法:

public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname)
{
    DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities();
    DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection();
    if (firstname == null && lastname != null)
    {
        IList<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                      where lastname == p.Nazwisko
                      **select** new DzieckoAndOpiekun(
                     p.Imie,
                     p.Nazwisko,
                     p.Opiekun.Imie,
                     p.Opiekun.Nazwisko)
                  ;
        result.AddRange(resultV);
    }
    return result;
}
和所选位置的错误:

错误1无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IList”。存在显式转换。是否缺少强制转换

你知道如何解决我的问题吗?

试试这个->

 new DzieckoAndOpiekun(
                         p.Imie,
                         p.Nazwisko,
                         p.Opiekun.Imie,
                         p.Opiekun.Nazwisko).ToList()
在linq查询之后,可以使用该方法将返回的IQueryable结果转换为IList,如下所示

   public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname)
{
    DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities();
    DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection();
    if (firstname == null && lastname != null)
    {
        IList<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                      where lastname == p.Nazwisko
                      **select** new DzieckoAndOpiekun(
                     p.Imie,
                     p.Nazwisko,
                     p.Opiekun.Imie,
                     p.Opiekun.Nazwisko).ToList()
                  ;
        result.AddRange(resultV);
    }
    return result;
}
要将IQuerable或IEnumerable转换为列表,可以执行以下操作之一:

IQueryable<object> q = ...;
List<object> l = q.ToList();
或:


您可以用var resultV替换IList resultV。

如果使用where子句,请确保包含。首先,如果您不想要IQueryable对象。

我已经用这种方法解决了数据库记录列表中EF的问题

ListOfObjectToBeOrder.OrderBy(x => x.columnName).ToList();
可能会报告返回空集合,而不是null。我有一个问题,就是这个问题的标题中的选角错误。 我只能使用return XYZ.ToList.AsQueryable来摆脱这两者;在具有IQueryable的方法中,如下所示:


希望这对类似情况的人有所帮助。

这是一个比其他人好得多的答案。特别是如果AddRange接受IEnumerable,它几乎肯定会……完美,超级简单。非常感谢。然后出现错误:错误1“WcfService1.DzieckoAndOpiekun”不包含“ToList”的定义,并且找不到接受“WcfService1.DzieckoAndOpiekun”类型的第一个参数的扩展方法“ToList”,是否缺少using指令或程序集引用?谢谢,这有助于解决我遇到的类似问题或.firstOrdefault当然。在这种情况下也可以使用ToArray Linq扩展,因为T[]也是IList。但是AddRange方法实际上需要什么呢?也许他可以使用var,这意味着这里是IQueryable,AddRange会很高兴吗?注意:IQueryable继承IEnumerable..ToList将正常工作,如果我使用的是.Take2。它会抛出相同的错误这是另一种情况。几乎100%的情况相反。而且,这看起来更像是糟糕的设计。从方法返回IQueryable的目的通常是让用户能够合成结果。伪装成IQueryable的列表看起来更像是黑客而不是故意设计的。@GertArnold感谢您的快速反馈,非常感谢!
ListOfObjectToBeOrder.OrderBy(x => x.columnName).ToList();
public IQueryable<SomeType> MethodName (...) {
  IQueryable<SomeType> XYZ;
  ...
  return XYZ.ToList().AsQueryable();
}