2010-08-04 61 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(); 
相關問題