2010-08-04 78 views
24

我有一个方法:无法隐式转换类型 'System.Linq.IQueryable' 到 'System.Collections.Generic.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) 
        ; 
     result.AddRange(resultV); 
    } 
    return result; 
} 

和错误在选定的地方:

错误1不能隐式地将类型'System.Linq.IQueryable <WcfService1.DzieckoAndOpiekun>'转换为'System.Collections.Generic.IList <WcfService1.DzieckoAndOpiekun>'。存在明确的转换(您是否缺少演员?)

任何想法如何解决我的问题?

回答

44

要转换IQuerableIEnumerable到列表中,您可以执行下列操作之一:

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

或:

IQueryable<object> q = ...; 
List<object> l = new List<object>(q); 
+1

理想的解决方案,Tnx! :) – netmajor 2010-08-04 06:04:00

+0

当然'.ToArray()'Linq扩展也可以用在这种情况下(因为'T []'也是'IList ')。但是'AddRange'方法实际需要什么?也许他可以使用'var'(这意味着'IQueryable '),'AddRange'会对此感到满意吗?注意:'IQueryable <>'继承'IEnumerable <>'。 – 2016-08-29 10:27:24

3

试试这个 - >

new DzieckoAndOpiekun(
         p.Imie, 
         p.Nazwisko, 
         p.Opiekun.Imie, 
         p.Opiekun.Nazwisko).ToList() 
+0

.ToList()将正常工作,如果我使用。取(2)来代替。它会抛出相同的错误 – manny 2016-12-19 09:16:59

2

可以使用.ToList()方法来转换IQueryable的结果返回给一个IList,如下图所示,LINQ查询后。

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; 
} 
+0

我有错误:错误'WcfService1.DzieckoAndOpiekun'不包含'ToList'的定义,并且没有扩展方法'ToList'接受'WcfService1.DzieckoAndOpiekun'类型的第一个参数(您是否缺少使用指令或程序集参考?) – netmajor 2010-08-04 05:57:10

10

您可以var resultV取代IList<DzieckoAndOpiekun> resultV

+3

这是一个比其他人更好的答案。特别是如果'AddRange()'接受'IEnumerable '(这几乎肯定会......) – 2010-08-04 05:31:12

+0

完美,超级简单。谢谢! – 2012-12-31 21:58:23

3

如果使用where子句,请确保包含.First()(如果不需要IQueryable对象)。

+0

感谢这有助于解决我遇到的类似问题 – mgrenier 2015-03-31 15:48:19

1

我已经得到解决我的问题这样的EF上的记录列表从数据库

ListOfObjectToBeOrder.OrderBy(x => x.columnName).ToList(); 
相关问题