回答
只是Cast<T>()
而已。假設它是一個相同類型的查詢。否則,您可以使用OfType<T>()
過濾方法來過濾某種類型的項目。
IQueryable query = ...;
IQueryable<MyType> x = query.Cast<MyType>(); // assuming the queryable is of `MyType` objects
IQueryable<MyDerivedType> y = query.OfType<MyDerivedType>(); // filter out objects derived from `MyType` (`MyDerivedType`)
不過你的情況,你說你正在使用動態LINQ和做一個動態的投影。考慮這個完全由查詢:
var query = dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)");
它導致IQueryable
類型的查詢。你不能把這個投射到一個特定類型的查詢IQueryable<T>
畢竟什麼是T
? Dynamic LINQ庫所做的是創建一個從DynamicCass
派生的類型。你可以投到IQueryable<DynamicClass>
(query.Cast<DynamicClass>()
),但你將無法訪問屬性,所以它是沒有意義的。
真的,你擁有的唯一不錯的選擇是在這種情況下使用dynamic
來訪問這些屬性。
foreach (dynamic x in query)
{
string someProperty = x.SomeProperty;
int anotherProperty = x.AnotherProperty;
// etc...
}
如果你想將其轉換爲您的POCO對象的查詢,你必須做轉換爲一個單獨的步驟,但使用LINQ to對象。
IEnumerable<SomePoco> query =
dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)")
.Cast<DynamicObject>().AsEnumerable().Cast<dynamic>()
.Select(x => new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
如果您必須有IQueryable<T>
,那麼您不應該首先使用動態投影。
IQueryable<SomePoco> query =
dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select(x => new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
看到如何投不工作的LINQ到實體,那麼我想你必須讓你的POCO對象的強類型集合唯一的選擇是打破了這一點,進入一個循環。
var query = dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)");
var result = new List<SomePoco>();
foreach (dynamic x in query)
{
result.Add(new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
}
我得到System.Exception:不能執行類型轉換.. Linq轉換爲實體只支持對原始類型轉換.. – Alex70 2011-05-11 13:28:00
所有我需要的是實現一個IQueryable
@Alex:這是如果信息在您提問時很有用,那麼在這種情況下,由於您投射到動態類型和技術上,您不能投射到特定類型,因此您不知道編譯時間類型。然而,你可以強制轉換爲DynamicClass,因爲這是對象派生的類型,除非你使用'dynamic'變量,否則你將無法直接訪問這些字段。 – 2011-05-11 21:01:22
- 1. IQueryable to DataSet
- 2. IList <T> to IQueryable <T>
- 3. convert IQueryable <int> to <int>
- 4. IQueryable to non-AD LDAP
- 5. IQueryable <Entity>在LINQ與嵌套對象IQueryable <DTO>
- 6. linq to sql ExecuteQuery()as IQueryable
- 7. 如何作爲IQueryable返回IQueryable <Something><ISomething>
- 8. 可能轉換IQueryable <Derived>到IQueryable <Base>?
- 9. 爲IQueryable分配IQueryable <int>時編譯出錯<object>
- 10. 變換LINQ的IQueryable爲分頁IQueryable的使用LINQ to NHibernate的
- 11. 返回的IQueryable <string>
- 12. IQueryable <a> to ObservableCollection <a>其中a =匿名類型
- 13. 索引IQueryable <int>?
- 14. 如何轉換的IQueryable <IQueryable的<Page>>到的IQueryable <Page>使用LINQ
- 15. 的一個IQueryable <T>
- 16. IQueryable <T> and async/await
- 17. IQueryable的ValueInjecter <T>
- 18. IQueryable <T>問題
- 19. 如何將linq組IQueryable <IEnumerable <T>>更改爲IQueryable <T>?
- 20. 的LINQ - 如何將IQueryable的<IEnumerable>到的IQueryable
- 21. 如何使IQueryable <out T>與指令IQueryable一起工作?
- 22. 從linq-to-sql中獲得Iqueryable <T>的計數?
- 23. ObjectQuery <T>或IQueryable <T>
- 24. IQueryable <T1>將轉換爲IQueryable的擴展方法<T2>
- 25. IQueryable動態「WHERE IN」(LINQ to SQL)
- 26. cast iqueryable
- 27. Linq2Sql IQueryable在另一個IQueryable內
- 28. 綁定GridView到IQueryable <T>
- 29. 使用返回類型IQueryable <TABLE_1>
- 30. IQueryable評估
而你如何獲得非泛型'IQueryable'? – 2011-05-11 13:08:16