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();
}