2017-02-03 100 views
0

我想通過傳遞謂詞作爲參數來獲取一定數量的元素。不過,我收到以下錯誤:將謂詞作爲參數傳遞

Cannot implicitly convert type System.Collections.Generic.IEnumerable < Students.Entities> to bool

var names = await Task.Run(() => Repository.GetWithNChildren(e => e.Entities.Take(offset))); 


public List<T> GetWithNChildren(Expression<Func<T, bool>> predicate = null) 
{ 
    var db = _factory.GetConnectionWithLock(); 
    using (db.Lock()) 
    { 
     return db.GetAllWithChildren(predicate, true); 
    } 
} 

GetAllWithChildren是在SQLite的類

namespace SQLiteNetExtensions.Extensions 
{ 
    public static class ReadOperations 
    { 
     public static bool EnableRuntimeAssertions; 

     public static T FindWithChildren<T>(this SQLiteConnection conn, object pk, bool recursive = false) where T : class; 
     public static List<T> GetAllWithChildren<T>(this SQLiteConnection conn, Expression<Func<T, bool>> filter = null, bool recursive = false) where T : class; 
     public static void GetChild<T>(this SQLiteConnection conn, T element, string relationshipProperty, bool recursive = false); 
     public static void GetChild<T>(this SQLiteConnection conn, T element, Expression<Func<T, object>> propertyExpression, bool recursive = false); 
     public static void GetChild<T>(this SQLiteConnection conn, T element, PropertyInfo relationshipProperty, bool recursive = false); 
     public static void GetChildren<T>(this SQLiteConnection conn, T element, bool recursive = false); 
     public static T GetWithChildren<T>(this SQLiteConnection conn, object pk, bool recursive = false) where T : class; 
    } 
} 
+0

哪一行有錯誤 –

+0

第一行有錯誤 – hotspring

+0

顯然,'的IEnumerable '的'。取(返回)'不能被轉換爲「布爾」。什麼是如此令人驚訝? –

回答

1

Func<T, bool>的方法意味着一個函數,它在T並返回bool

函數Take(int n)需要IEnumerable<T>並返回一個IEnumerable<T>,最多有n成員。

您需要將e.Entities.Take(offset)更改爲返回bool或開關Expression<Func<T, bool>> predicate = nullExpression<Func<T, U>> predicate = null並將GetAllWithChildren更改爲採用相同類型。

+0

一旦我將其更改爲'',然後'GetAllWithChilldren'抱怨,因爲它只接受'',請參閱我的更新問題 – hotspring

+0

我所需要的只是不獲取所有項目,僅獲取某些項目(偏移量)。 – hotspring

1

錯誤是正確的。
這個表達式:

Expression<Func<T, bool>> 

的意思是 「我把T的實例,並會返回一個布爾」

但你回報booelean:

e => e.Entities.Take(offset) 

這是因爲 Take(..)不返回布爾值,而是一個IEnumerable的實體。

要修復它 - 你可以試試:

e => e.Entities.Take(offset).Count() > 3 
-2

我想你忘了你的申報方法一般。所以,不是

... GetWithNChildren(Expression<Func<T, bool>> predicate = null) 

你應該有:

GetWithNChildren<T>(Expression<Func<T, bool>> predicate = null) 
+0

如果是這樣的話,他會得到一個不同的錯誤,T很可能是在課堂上定義的。 –

+0

謝謝Scott,這可能是對的。 ;-) –