2009-09-17 249 views
2
IQueryable<T> IS3Repository.FindAllBuckets<T>() 
{ 
    IQueryable<object> list = _repository.GetAllBuckets().Cast<object>().AsQueryable(); 
    return list == null ? default(T) : (T)list; 
} 

這是錯誤: 錯誤3不能將類型'T'隱式轉換爲'System.Linq.IQueryable'。一個顯式轉換存在(是否缺少強制轉換?)爲什麼Generic Casting不能在這段代碼中工作?

我實現了這個接口:

IQueryable<T> FindAllBuckets<T>(); 

問題是什麼?

這是我曾嘗試:

  1. IQueryable<T> IS3Repository.FindAllBuckets<T>() 
    { 
        IQueryable<object> list = _repository 
               .GetAllBuckets() 
               .Cast<object>().AsQueryable(); 
    
        return list == null ? list.DefaultIfEmpty().AsQueryable() : list; } 
    

回答

1

您正在將list轉換爲T,但FindAllBuckets的返回值類型爲IQueryable<T>

取決於_repository.GetAllBuckets()返回類型,這應該工作:

IQueryable<T> IS3Repository.FindAllBuckets<T>() 
{ 
    return _repository.GetAllBuckets() 
         .Cast<T>() 
         .AsQueryable(); 
} 
+0

謝謝你。知識就是力量!!! – Geo 2009-09-17 02:27:31

0

試試這個:

IQueryable<T> IS3Repository.FindAllBuckets<T>() 
{ 
    IQueryable<T> list = _repository 
         .GetAllBuckets() 
         .Cast<T>() 
         .AsQueryable(); 

    return list ?? new List<T>().AsQueryable(); 
} 

與原有方法的主要問題是,你試圖返回實例的T而不是IQueryable<T>的實例。

+0

操作 '?'不能被應用於類型「System.Linq.IQueryable 」和「System.Linq.IQueryable 的操作數。這是我嘗試的錯誤。謝謝。 – Geo 2009-09-17 02:12:12

相關問題